std.db.postgres
PostgreSQL-Client (Wire-Protokoll v3): Pure-Lyx-Implementierung ohne libpq — direktes TCP + PostgreSQL Frontend/Backend Protocol 3.0. Unterstützt Simple Query, Prepared Statements mit Parametern, Transaktionen, Connection Pooling, LISTEN/NOTIFY und COPY. Authentifizierung: MD5, Cleartext (kein SASL).
→ Standard Library · std.db.sqlite · std.db.mysql · std.crypto.md5
Konstanten
Verbindungsstatus
Funktionen für Verbindungsaufbau und -verwaltung:
| Konstante | Wert | Beschreibung |
PG_STATUS_DISCONNECTED | 0 | Nicht verbunden |
PG_STATUS_CONNECTED | 1 | Verbunden, bereit für Queries |
PG_STATUS_IN_TX | 2 | Aktive Transaktion |
PG_STATUS_TX_ERROR | 3 | Transaktion im Fehlerzustand |
Fehlercodes
| Konstante | Wert | Beschreibung |
PG_ERR_NONE | 0 | Kein Fehler |
PG_ERR_SOCKET | 3001 | Socket-Fehler |
PG_ERR_CONNECT | 3002 | Verbindungsfehler |
PG_ERR_OOM | 3003 | Kein Speicher |
PG_ERR_SEND | 3004 | Sende-Fehler |
PG_ERR_RECV | 3005 | Empfangs-Fehler |
PG_ERR_PROTO | 3006 | Protokollfehler / Server-Fehlermeldung |
Transaktionsstatus (ReadyForQuery)
| Konstante | Wert | Beschreibung |
PG_TX_IDLE | 73 (I) | Keine aktive Transaktion |
PG_TX_ACTIVE | 84 (T) | Transaktion aktiv |
PG_TX_ERROR | 69 (E) | Transaktion im Fehlerzustand |
PostgreSQL OID-Typen
| Konstante | OID | Beschreibung |
PG_OID_BOOL | 16 | Boolean |
PG_OID_BYTEA | 17 | Binärdaten |
PG_OID_INT8 | 20 | BIGINT |
PG_OID_INT2 | 21 | SMALLINT |
PG_OID_INT4 | 23 | INTEGER |
PG_OID_TEXT | 25 | TEXT |
PG_OID_FLOAT4 | 700 | REAL |
PG_OID_FLOAT8 | 701 | DOUBLE PRECISION |
PG_OID_VARCHAR | 1043 | VARCHAR |
PG_OID_DATE | 1082 | DATE |
PG_OID_TIMESTAMP | 1114 | TIMESTAMP |
PG_OID_NUMERIC | 1700 | NUMERIC/DECIMAL |
Protokoll-Nachrichtentypen
Backend → Client (Auswahl): PG_MSG_AUTH (R), PG_MSG_READY (Z), PG_MSG_ROW_DESC (T), PG_MSG_DATA_ROW (D), PG_MSG_CMD_COMPLETE (C), PG_MSG_ERROR (E), PG_MSG_NOTICE (N), PG_MSG_NOTIFY (A), PG_MSG_COPY_IN (G), PG_MSG_COPY_OUT (H).
Frontend → Server (Auswahl): PG_FE_QUERY (Q), PG_FE_PARSE (P), PG_FE_BIND (B), PG_FE_EXECUTE (E), PG_FE_SYNC (S), PG_FE_TERMINATE (X).
Funktionen
Verbindung
Funktionen für Verbindungsaufbau und -verwaltung:
| Signatur | Beschreibung |
PGConnect(host: pchar, port: int64, user: pchar, password: pchar, database: pchar): int64 | Öffnet TCP-Verbindung und führt Handshake durch. Gibt PGConn-Pointer zurück; 0 nur bei TCP-Fehler. Bei Auth-Fehler: Pointer gültig, aber PGIsConnected=0 und PGError gesetzt |
PGClose(conn: int64): void | Sendet Terminate-Nachricht, schließt TCP, gibt PGConn-Speicher frei |
PGIsConnected(conn: int64): int64 | Gibt 1 zurück wenn verbunden und bereit |
PGError(conn: int64): pchar | Fehlermeldung der letzten Operation (SQLSTATE oder Text) |
PGErrno(conn: int64): int64 | Fehlercode der letzten Operation (PG_ERR_*) |
PGServerVersion(conn: int64): pchar | Server-Versionsstring (z. B. „16.2„) |
PGBackendPID(conn: int64): int64 | PID des Server-Prozesses |
PGGetHost(conn: int64): pchar | Host aus dem Connect-Aufruf |
PGGetPort(conn: int64): int64 | Port aus dem Connect-Aufruf |
PGGetUser(conn: int64): pchar | Benutzername |
PGGetDatabase(conn: int64): pchar | Datenbankname |
PGGetTxStatus(conn: int64): int64 | Transaktionsstatus (PG_TX_IDLE/PG_TX_ACTIVE/PG_TX_ERROR) |
PGPing(conn: int64): int64 | Prüft ob die Verbindung noch aktiv ist. Gibt 1 zurück wenn der Server antwortet |
Simple Query
| Signatur | Beschreibung |
PGQuery(conn: int64, sql: pchar): int64 | Sendet SQL-Statement, liest alle Antworten und gibt PGResult-Pointer zurück; 0 bei Fehler |
PGFreeResult(result: int64): void | Gibt alle Ressourcen des PGResult frei |
Result-Accessoren
| Signatur | Beschreibung |
PGNumRows(result: int64): int64 | Anzahl zurückgelieferter Zeilen |
PGNumFields(result: int64): int64 | Anzahl Spalten |
PGAffectedRows(result: int64): int64 | Bei INSERT/UPDATE/DELETE: Anzahl betroffener Zeilen |
PGFetchRow(result: int64): int64 | Bewegt den Cursor zur nächsten Zeile. Gibt 1 wenn eine Zeile verfügbar, 0 wenn fertig |
PGGetStr(result: int64, col: int64): pchar | Spalte als String (0-basiert). 0 wenn NULL |
PGGetInt(result: int64, col: int64): int64 | Spalte als int64 (Text → int64) |
PGGetFloat(result: int64, col: int64): f64 | Spalte als f64 (Text → f64) |
PGGetBool(result: int64, col: int64): int64 | Spalte als Boolean: „t“/„T„/„1“ → 1, sonst 0 |
PGIsNull(result: int64, row: int64, col: int64): int64 | 1 wenn Wert NULL ist (direkter Row-Index, nicht Cursor) |
PGGetFieldName(result: int64, col: int64): pchar | Spaltenname |
PGGetFieldTypeOid(result: int64, col: int64): int64 | PostgreSQL-Typ-OID (vgl. PG_OID_*-Konstanten) |
PGDataSeek(result: int64, row: int64) | Setzt den Cursor auf Zeile row (für erneutes Lesen) |
Prepared Statements
Funktionen für Prepared Statements:
| Signatur | Beschreibung |
PGStmtPrepare(conn: int64, name: pchar, sql: pchar): int64 | Kompiliert SQL-Statement auf dem Server. name: eindeutiger Statement-Name (leer = unbenannt). Gibt PGStmt-Pointer zurück; 0 bei Fehler |
PGStmtExecute(conn: int64, stmt: int64): int64 | Sendet Bind + Execute + Sync, liest Ergebnisse. Gibt PGResult zurück |
PGStmtClose(conn: int64, name: pchar): void | Gibt das benannte Statement auf dem Server frei |
PGStmtDescribe(conn: int64, name: pchar): int64 | Gibt Metadaten (Parameter- und Spaltentypen) zurück |
PGStmtReset(stmt: int64): void | Setzt Parameter-Bindings auf NULL zurück |
PGStmtFree(stmt: int64): void | Gibt den lokalen PGStmt-Speicher frei (kein Server-Close) |
Parameter-Binding (0-basierter Index)
| Signatur | Beschreibung |
PGBindInt(stmt: int64, i: int64, v: int64) | Bindet int64 an Parameter i (als Dezimalstring) |
PGBindFloat(stmt: int64, i: int64, v: f64) | Bindet f64 an Parameter i |
PGBindStr(stmt: int64, i: int64, v: pchar) | Bindet String an Parameter i |
PGBindBool(stmt: int64, i: int64, v: int64) | Bindet Boolean an Parameter i (0 → „f„, sonst → „t“) |
PGBindNull(stmt: int64, i: int64) | Bindet NULL an Parameter i |
Transaktionen
Transaktionsverwaltung:
| Signatur | Beschreibung |
PGBegin(conn: int64): int64 | BEGIN |
PGCommit(conn: int64): int64 | COMMIT |
PGRollback(conn: int64): int64 | ROLLBACK |
PGBeginReadOnly(conn: int64): int64 | BEGIN READ ONLY |
PGBeginSerializable(conn: int64): int64 | BEGIN ISOLATION LEVEL SERIALIZABLE |
PGSavepoint(conn: int64, name: pchar): int64 | SAVEPOINT name |
PGRollbackTo(conn: int64, name: pchar): int64 | ROLLBACK TO name |
PGReleaseSavepoint(conn: int64, name: pchar): int64 | RELEASE SAVEPOINT name |
PGInTransaction(conn: int64): int64 | 1 wenn eine Transaktion aktiv ist |
PGTxFailed(conn: int64): int64 | 1 wenn die Transaktion im Fehlerzustand ist |
PGSetAutoCommit(conn: int64, on: int64): int64 | Autocommit ein- oder ausschalten |
| Signatur | Beschreibung |
PGChanges(conn: int64): int64 | Betroffene Zeilen des letzten INSERT/UPDATE/DELETE |
PGLastInsertId(conn: int64): int64 | OID der zuletzt eingefügten Zeile (nur bei INSERT … RETURNING OID) |
PGEscapeStr(dst: int64, src: pchar): int64 | |
Letzte Aktualisierung: 2026-06-05