Skip to content

🐘 Postgres API

Parameterized queries and transactions over a pooled pg connection.

Connection

ping

Verify connectivity to the database.

ts
ping(): Promise<{ pong: boolean }>
ts
const pg = zedgi.postgres();
await pg.ping(); // { pong: true }
python
pg = zedgi.postgres()
pg.ping()  # {'pong': True}
http
POST /rpc HTTP/1.1
Host: dev123.zedgi.app
x-zedgi-key: zk_live_xxx
content-type: application/json

{
  "service": "postgres",
  "method": "ping",
  "payload": {}
}

Queries

query

Run a parameterized SQL query. Returns rows and row count.

ts
query(sql, params?): Promise<{ rows, rowCount }>
ts
const pg = zedgi.postgres();
const { rows } = await pg.query(
  'SELECT id, email FROM users WHERE age > $1',
  [21]
);
python
pg = zedgi.postgres()
result = pg.query(
  'SELECT id, email FROM users WHERE age > %s',
  [21]
)
print(result["rows"])
http
POST /rpc HTTP/1.1
Host: dev123.zedgi.app
x-zedgi-key: zk_live_xxx
content-type: application/json

{
  "service": "postgres",
  "method": "query",
  "payload": {
    "sql": "SELECT id, email FROM users WHERE age > $1",
    "params": [
      21
    ]
  }
}

transaction

Run multiple statements atomically in one transaction.

ts
transaction(statements): Promise<results[]>
ts
const pg = zedgi.postgres();
await pg.transaction([
  { sql: 'INSERT INTO orders(user_id) VALUES ($1)', params: [1] },
  { sql: 'UPDATE users SET orders = orders + 1 WHERE id = $1', params: [1] },
]);
python
pg = zedgi.postgres()
pg.transaction([
  {"sql": "INSERT INTO orders(user_id) VALUES (%s)", "params": [1]},
  {"sql": "UPDATE users SET orders = orders + 1 WHERE id = %s", "params": [1]},
])
http
POST /rpc HTTP/1.1
Host: dev123.zedgi.app
x-zedgi-key: zk_live_xxx
content-type: application/json

{
  "service": "postgres",
  "method": "transaction",
  "payload": {
    "statements": [
      {
        "sql": "INSERT INTO orders(user_id) VALUES ($1)",
        "params": [
          1
        ]
      }
    ]
  }
}