EDGE DB
Banco de dados edge
Um banco de dados relacional isolado por cliente, criado sob demanda. Manda SQL de verdade por HTTP, sem schema fixo, sem servidor de banco pra provisionar.
Edge database
An isolated relational database per client, created on demand. Send real SQL over HTTP, no fixed schema, no database server to provision.
SYNC resposta na mesma chamada answers in the same call
Endpoints
Endpoints
/api/v1/edgedb/{name}/query
executa uma instrução SQL, o banco é criado na primeira chamada
runs one SQL statement, the database is created on first call
/api/v1/edgedb
lista os bancos do cliente
lists the client's databases
/api/v1/edgedb/{name}
remove um banco inteiro
removes an entire database
Não existe um POST /create separado. O nome no path é criado sozinho na primeira query. SELECT/PRAGMA/EXPLAIN/WITH devolvem linhas; qualquer outra instrução (INSERT/UPDATE/DELETE/CREATE/...) devolve rows_affected/last_insert_id.
There's no separate POST /create. The name in the path is created on its own on first query. SELECT/PRAGMA/EXPLAIN/WITH return rows; any other statement (INSERT/UPDATE/DELETE/CREATE/...) returns rows_affected/last_insert_id.
Bloqueio deliberado: ATTACH é rejeitado, é o único jeito de escapar pro filesystem do servidor. Fora isso, é o SQL do próprio cliente contra o próprio banco dele, sem sanitização além disso.
Deliberate block: ATTACH is rejected, it's the one way to escape onto the server's filesystem. Beyond that, it's the client's own SQL against their own database, no further sanitizing.
Parâmetros
Parameters
| Nome | Name | Onde | In | Descrição | Description |
|---|---|---|---|---|---|
name |
path | nome do banco, isolado por cliente: um banco próprio por (cliente, nome) | database name, isolated per client: its own database per (client, name) | ||
sql |
body | a instrução SQL a executar | the SQL statement to run | ||
args |
body | opcional: valores posicionais pros ? da instrução (evita concatenar valor no SQL) |
optional: positional values for the statement's ? placeholders (avoids concatenating values into the SQL) |
Exemplo
Example
curl -X POST "https://api.alicercelabs.com.br/api/v1/edgedb/meubanco/query" \
-H "Authorization: Bearer <token>" \
-d '{"sql":"CREATE TABLE pedidos (id INTEGER PRIMARY KEY, cliente TEXT)"}'
curl -X POST "https://api.alicercelabs.com.br/api/v1/edgedb/meubanco/query" \
-H "Authorization: Bearer <token>" \
-d '{"sql":"INSERT INTO pedidos (cliente) VALUES (?)","args":["Fulano"]}'
curl -X POST "https://api.alicercelabs.com.br/api/v1/edgedb/meubanco/query" \
-H "Authorization: Bearer <token>" \
-d '{"sql":"SELECT * FROM pedidos"}'
{
"success": true,
"data": { "columns": ["id", "cliente"], "rows": [[1, "Fulano"]] },
"meta": { "elapsed_ms": 1, "request_id": "..." }
}
Erros possíveis
Possible errors
| Status | Motivo | Reason |
|---|---|---|
| 400 | nome de banco inválido, sql vazio, ATTACH, erro de sintaxe/execução do próprio SQL, ou limite de bancos atingido | invalid database name, empty sql, ATTACH, the client's own SQL syntax/execution error, or the database limit reached |
| 401 | token ausente ou inválido | missing or invalid token |
| 429 | limite de taxa excedido | rate limit exceeded |
| 503 | Edge DB não configurado no servidor | Edge DB not configured on the server |
Usando o SDK
Using the SDK
Um banco por (cliente, banco), criado sob demanda na primeira query, sem passo de criação separado.
One database per (client, database), created on demand on the first query, no separate create step.
SDKs oficiais: Go · Python · JavaScript.
Official SDKs: Go · Python · JavaScript.
Criar tabela e inserir dados
Create a table and insert data
o banco meubanco é criado na hora, se ainda não existir.
the meubanco database is created on the spot if it doesn't exist yet.
import (
"context"
"fmt"
alicercelabs "github.com/alicercelabs/alicercesdk-go"
)
client := alicercelabs.New("alk_...")
ctx := context.Background()
client.EdgeDB.Query(ctx, "meubanco", "CREATE TABLE t (id INTEGER PRIMARY KEY, nome TEXT)", nil)
client.EdgeDB.Query(ctx, "meubanco", "INSERT INTO t (nome) VALUES (?)", []any{"Fulano"})from alicercelabs import AlicerceLabs
client = AlicerceLabs(api_key="alk_...")
client.edgedb.query("meubanco", "CREATE TABLE t (id INTEGER PRIMARY KEY, nome TEXT)")
client.edgedb.query("meubanco", "INSERT INTO t (nome) VALUES (?)", ["Fulano"])import { AlicerceLabs } from "alicercesdk-javascript";
const client = new AlicerceLabs("alk_...");
await client.edgedb.query("meubanco", "CREATE TABLE t (id INTEGER PRIMARY KEY, nome TEXT)");
await client.edgedb.query("meubanco", "INSERT INTO t (nome) VALUES (?)", ["Fulano"]);Consultar
Query
res, err := client.EdgeDB.Query(ctx, "meubanco", "SELECT * FROM t", nil)
fmt.Println(res.Rows)res = client.edgedb.query("meubanco", "SELECT * FROM t")
print(res["rows"])const res = await client.edgedb.query("meubanco", "SELECT * FROM t");
console.log(res.rows);Listar bancos / remover um banco
List databases / delete one
dbs, err := client.EdgeDB.List(ctx)
err = client.EdgeDB.Delete(ctx, "meubanco")dbs = client.edgedb.list()
client.edgedb.delete("meubanco")const dbs = await client.edgedb.list();
await client.edgedb.delete("meubanco");Limites
Limits
1.000/dia · 41/hora. Bancos por cliente: 10 por padrão. Tamanho máximo por banco: 50MB, aplicado internamente pelo próprio banco de dados. Timeout de query: 5s. Tudo tunável por cliente via admin.
1,000/day · 41/hour. Databases per client: 10 by default. Max size per database: 50MB, enforced internally by the database itself. Query timeout: 5s. All tunable per client via admin.