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

Metadaten & Hilfsfunktionen

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