B.15 PostgreSQL C-API
B.15.1 Übersetzen einer Anwendung
Benötigte Headerdatei:
#include <libpq-fe.h>
Compileraufruf (benötigt Pfad zum Include-Verzeichnis von PostgreSQL API):
$ gcc -c -I/usr/include/pgsql client_anwendung.c
Linkeraufruf (benötigt Pfadangaben zu den Bibliotheken von PostgreSQL API):
$ gcc -o client_anwendung client_anwendung.o \
-L/usr/lib/pgsql -lpq
B.15.2 Eine Verbindung zum PostgreSQL-Server herstellen
PGconn *PQconnectdb(const char *conninfo);
PGconn *PQsetdbLogin(const char *pghost,
const char *pgport,
const char *pgoptions,
const char *pgtty,
const char *dbName,
const char *login,
const char *pwd);
PGconn *PQsetdb(char *pghost,
char *pgport,
char *pgoptions,
char *pgtty,
char *dbName);
/* Nichtblockierende Funktionen */
PGconn *PQconnectStart(const char *conninfo);
PostgresPollingStatusType PQconnectPoll(PGconn *conn);
B.15.3 Status und Informationen zur Verbindung ermitteln
Tabelle B.75
Status und Informationen zur Verbindung ermitteln
Funktion
|
Bedeutung
|
ConnStatusType PQstatus(
const PGconn *conn);
|
Status des Verbindungsaufbaus überprüfen
|
char *PQdb(
const PGconn *conn);
|
Gibt einen Zeiger zurück auf den Datenbanknamen der Verbindung.
|
char *PQuser(
const PGconn *conn);
|
Gibt den Benutzernamen der Verbindung zurück.
|
char *PQpass(
const PGconn *conn);
|
Gibt das Passwort der Verbindung zurück.
|
char *PQhost(
const PGconn *conn);
|
Gibt den Serverhostnamen der Verbindung zurück.
|
char *PQport(
const PGconn *conn);
|
Gibt den Port der Verbindung zurück.
|
char *PQtty(const PGconn *conn);
|
Gibt das TTY für die Debugausgaben der Verbindung zurück.
|
char *PQoptions(
const PGconn *conn);
|
Gibt Konfigurationsoptionen die der Verbindungsanfrage übergeben wurden zurück.
|
int PQsocket(
const PGconn *conn);
|
Gibt die Deskriptornummer des mit dem Server verbundenen Sockets zurück. Bei –1 wird angezeigt, dass keine Verbindung besteht.
|
int PQbackendPID(
const PGconn *conn);
|
Gibt die Prozesskennung (PID) des Serverprozesses zurück, der mit dieser Verbindung arbeite zurück.
|
SSL *PQgetssl(
const PGconn *conn);
|
Hier wird eine SSL-Struktur zurückgegeben. Wird SSL nicht verwendet wird NULL zurückgegeben. Mehr dazu entnehmen Sie ggf. aus der Anleitung von OpenSSL.
|
B.15.4 Verbindung beenden oder wieder aufnehmen
Tabelle B.76
Verbindung beenden oder wieder aufnehmen
Syntax
|
Bedeutung
|
void PQfinish(PGconn *conn);
|
Verbindung schließen und den Speicher für das PGconn-Objekt wieder freigegeben
|
void PQreset(PGconn *conn);
|
Schließt die Verbindung zum Server und versucht eine neue Verbindung zum selben Server mit den gleichen Parametern aufzubauen
|
int PQresetStart(PGconn *conn);
PostgresPollingStatusType
PQresetPoll(PGconn *conn);
|
Für nicht blockierenden Verbindungen gibt es diese Funktionen die Versuchen eine Verbindung zu schließen und erneut mit demselben Server eine neue nicht blockierende Verbindung aufzubauen
|
B.15.5 SQL-Anfragen an den Server machen und den Status auswerten
Tabelle B.77
Anfrage an den Server und den Status auswerten
Syntax
|
Bedeutung
|
PGresult *PQexec(
PGconn *conn,
const char *command);
|
Anfragen an den Server
|
ExecStatusType PQresultStatus(
const PGresult *res);
|
Rückgabe-Status der Anfrage
|
char *PQresStatus(
ExecStatusType status);
|
Macht aus den von PQresultStatus() zurückgegebenen Wert eine aussagekräftige Stringkonstante
|
char *PQresultErrorMessage(
const PGresult *res);
|
wie PQresultStatus() und PqresStatus() in einem Rutsch
|
B.15.6 Ergebnis einer SQL-Anfrage auswerten
Tabelle B.78
Funktionen, um das Ergebnis einer Anfrage auszuwerten
Funktion
|
Bedeutung
|
int PQntuples(
const PGresult *res);
|
Gibt die Anzahl der Zeilen (Tuples) des Anfrageergebnisses zurück.
|
int PQnfields(
const PGresult *res);
|
Gibt die Anzahl der Spalten in einer Zeile des Anfrageergebnisses zurück.
|
char *PQfname(
const PGresult *res,
int spalten_nummer);
|
Gibt den Namen der Spalte spalten_nummer – beginnend bei 0 – zurück.
|
int PQfnumber(
const PGresult *res,
const char *field_name);
|
Gibt die Nummer der Spalte zum angegebene Spaltennamen field_name zurück.
|
Oid PQftype(
const PGresult *res,
int spalten_nummer);
|
Hiermit können Sie den Datentypen der Spalte erfahren. Eine Übersicht der OIDs finden Sie in der Datei pg_type.h (meistens im Verzeichnis von libpq im Pfad server/catalog/pg_type.h zu finden).
|
int PQfmod(
const PGresult *res,
int spalten_nummer);
|
Gibt die typenspezifischen Modifikationsdaten der Spalte (beginnend mit 0) mit der angegebenen Nummer zurück.
|
int PQfsize(
const PGresult *res,
int spalten_nummer);
|
Gibt die Größe in Bytes der Spalte spalten_nummer zurück. Wird –1 zurückgegeben, handelt es sich um einen String variabler Länge.
|
int PQbinaryTuples(
const PGresult *res);
|
Diese Funktion gibt 1 zurück, wenn PGresult binäre Zeilendaten enthält. Bei 0 handelt es sich um Texdaten.
|
void PQclear(PQresult *res);
|
Speicherplatz der Anfrage freigeben
|
B.15.7 Rückgabe des Anfrageergebnisses auslesen
Tabelle B.79
Rückgabe des Anfrageergebnisses auslesen
Syntax
|
Bedeutung
|
char* PQgetvalue(
const PGresult *res,
int zeilen_nummer,
int spalten_nummer);
|
Einzelne Spaltenwerte auslesen
|
int PQgetisnull(
const PGresult *res,
int zeilen_nummer,
int spalten_nummer);
|
Testet ob, der Wert einer Spalte gleich NULL ist
|
int PQgetlength(
const PGresult *res,
int zeilen_nummer,
int spalten_nummer);
|
Länge des Datenwertes einer Spalte
|
B.15.8 Ergebnisse anderer Befehle ermitteln
Tabelle B.80
Ergebnisse anderer Befehle ermitteln
Syntax
|
Bedeutung
|
char * PQcmdStatus(
PGresult *res);
|
Gibt eine Statuszeichenkette für einen Befehl (bspw.: INSERT 16994 1) zurück
|
char * PQcmdTuples(
PGresult *res);
|
Gibt die Anzahl der Zeilen, die auf einen SQL-Befehl wie INSERT, UPDATE oder DELETE eine Auswirkung hatte, zurück
|
Oid PQoidValue(
const PGresult *res);
|
Gibt entweder einen (ganzzahligen) Wert vom Typ Oid oder im Falle eines Fehlers InvalidOid zurück
|
char * PQoidStatus(
const PGresult *res);
|
Gibt eine Zeichenkette mit der OID der eingefügten Zeile zurück, wenn die SQL-Anweisung ein INSERT war – ansonsten 0 wenn die Zieltabelle keine OIDs hatte. Wenn der SQL-Befehl kein INSERT war, wird ein leerer String zurückgegeben.
|
|