Saltearse al contenido

Base de datos

Nuvem Database es un motor SQL (D1/SQLite) completamente administrado que corre en el edge. Cada proyecto tiene su propia base de datos aislada.

Conceptos

  • Tabla — define la estructura (columnas con tipos)
  • Registro — una fila de datos
  • Query — consulta SQL ejecutada directamente

Tipos de columna

TipoDescripción
textTexto de longitud variable
numberNúmero decimal (float)
integerNúmero entero
booleantrue / false
dateFecha ISO 8601

Endpoints

Tablas

Ventana de terminal
# Listar tablas
GET /v1/db/tables
# Crear tabla
POST /v1/db/tables
{
"name": "orders",
"columns": [
{ "name": "customer_id", "type": "text", "required": true },
{ "name": "total", "type": "number", "required": true },
{ "name": "status", "type": "text", "required": false }
]
}
# Obtener tabla
GET /v1/db/tables/:tableId
# Eliminar tabla
DELETE /v1/db/tables/:tableId

Registros

Ventana de terminal
# Listar registros
GET /v1/db/:table?page=1&pageSize=20
# Crear registro
POST /v1/db/:table
{ "customer_id": "usr_abc", "total": 5000, "status": "pending" }
# Obtener registro
GET /v1/db/:table/:id
# Actualizar registro
PUT /v1/db/:table/:id
{ "status": "paid" }
# Eliminar registro
DELETE /v1/db/:table/:id

Query SQL

Ventana de terminal
# Ejecutar query (solo SELECT)
POST /v1/db/query
{
"sql": "SELECT * FROM orders WHERE status = ? ORDER BY created_at DESC LIMIT 10",
"params": ["pending"]
}

SDK

import { createClient } from '@nuvem/js';
const nuvem = createClient({ apiKey: process.env.NUVEM_API_KEY! });
// Listar con filtro
const { data } = await nuvem.db
.from('orders')
.select()
.where({ status: 'pending' })
.orderBy('created_at', 'desc')
.limit(10)
.all();
// Crear
const record = await nuvem.db.from('orders').insert({
customer_id: 'usr_abc',
total: 5000,
status: 'pending',
});
// Actualizar
await nuvem.db.from('orders').update({ status: 'paid' }).where({ id: 'rec_xyz' });
// Eliminar
await nuvem.db.from('orders').delete().where({ id: 'rec_xyz' });

Errores comunes

CódigoMensajeCausa
table_not_foundLa tabla no existeTabla inexistente o typo en el nombre
record_not_foundEl registro no existeID inválido
validation_errorCampo requerido faltanteFalta un campo required: true
duplicate_columnYa existe una columna con ese nombreAl agregar columna duplicada