LXXXI. PostgreSQL Funktionen

Einführung

PostgreSQL ist ein kostenloses Open Source Datenbanksystem . Es wurde ursprünglich im UC Berkeley Computer Science Department entwickelt und hat Pionierarbeit bei objektrelationalen Datenbankkonzepten geleistet , die jetzt Einzug in einige kommerzielle Datenbanken halten . PostgreSQL bietet SQL92 / SQL99 Sprachunterstützung , Transaktionen und ein erweiterbares Typkonzept . PostgreSQL ist eine Weiterentwicklung des ursprünglichen Berkeley-Codes .

Anforderungen

Um PostgreSQL benutzen zu können , brauchen Sie mindestens eine Version 6.5 oder später , um alle Leistungsmerkmale des PostgreSQL-Moduls nutzen zu können , müssen Sie eine Version ab 7.0 haben . PostgreSQL unterstützt viele Zeichencodierungen , einschließlich multibyte character encoding . Die aktuelle Version sowie weitere Informationen über PostgreSQL sind auf der Seite http : / /www.postgresql.org / erhältlich .

Installation

Um die PostgreSQL-Unterstützung nutzen zu können , müssen Sie PHP mit --with-pgsql[ =DIR ] kompilieren . Falls das shared object module verfügbar ist , kann das PostgreSQL-Modul mit der extension -Direktive der Datei php.ini oder mittels der Funktion dl( ) geladen werden .

Laufzeit Konfiguration

Die unterstützten ini-Direktiven sind in der Datei php.ini-dist beschrieben , die mit der Distribution ausgeliefert wird .

Hinweise

Warnung

Wegen eines Bugs in der Behandlung von NOTICE-Benachrichtigungen sollte das PostgreSQL-Modul der PHP Version 4.0.6 nicht benutzt werden . Bitte benutzen Sie PHP 4.1.0 oder höher .

Warnung

Die Namen der PostgreSQL-Funktionen werden sich ab der PHP Version 4.2.0 ändern , um sie an die gültigen Coding-Standards anzupassen . Die meisten neuen Namen enthalten zusätzliche Unterstriche , z.B . pg_lo_open( ) . Einige Funktionen werden der Einheitlichkeit wegen umbenannt , z.B . pg_exec( ) zu pg_query( ) . Die älteren Namen können in der Version 4.2.0 und auch ein paar Releases danach noch verwendet werden , aber sie werden irgendwann gelöscht .

Tabelle 1 . Die geänderten Funktionsnamen

Alter Name Neuer Name

Die veraltete Syntax von pg_connect( ) und pg_pconnect( ) wird ungültig werden , um zukünftig asynchrone Verbindungen zu unterstützen . Bitte benutzen Sie einen Verbindungsstring mit pg_connect( ) bzw . pg_pconnect( ) .

Nicht alle Funktionen sind in allen Versionen verfügbar . Es hängt davon ab , welche libpq Version ( das PostgreSQL C Client Interface ) auf Ihrem Rechner verfügbar ist und wie libpq kompiliert wurde . Falls eine Funktion nicht verfügbar ist , liegt es daran , dass libpq die nötigen Routinen nicht unterstützt , die die Funktion braucht .

Es ist außerdem wichtig , dass Ihre libpq neuer ist , als der PostgreSQL-Server , zu dem Sie eine Verbindung aufbauen . Wenn Sie eine libpq benutzen , die älter ist , als vom PostgreSQL-Server erwartet , werden Sie wahrscheinlich Probleme haben .

Seit Version 6.3 ( 03 / 02 / 1998 ) benutzt PostgreSQL per Voreinstellung Unix Domain Sockets . Ein TCP / IP Port wird NICHT standardmäßig geöffnet . In der untenstehenden Tabelle werden diese neuen Verbindungsmöglichkeiten gezeigt . Der Socket ist in / tmp / .s.PGSQL.5432 zu finden . Der Schalter -i , der dem postmaster mitgegeben werden kann , weist diesen an , sowohl über TCP / IP als auch über UNIX Domain Sockets eine Verbindung aufzubauen .

Tabelle 2 . Der Postmaster und PHP

Is the postmaster running and accepting TCP / IP ( with -i ) connection at 'localhost ' on port '5432 ' ? in / pfad / zu / datei.php on line 20 .


Eine Verbindung zu einem PostgreSQL-Server lässt sich auch mit den folgenden Wertepaaren , die im Verbindungsstring gesetzt werden , herstellen ( wobei mindestens der Name der Datenbank angegeben sein muss) : $conn = pg_connect("host=myHost port=myPort tty=myTTY options=myOptions dbname=myDB user=myUser password=myPassword ") ;

Die bisherige Syntax $conn = pg_connect ( "host" , "port" , "options" , "tty" , "dbname" ) ist veraltet und sollte nicht weiter verwendet werden .

Umgebungsvariablen beeinflussen das Server / Client-Verhalten von PostgreSQL . Zum Beispiel sucht das PostgreSQL-Modul nach der Umgebungsvariablen PGHOST , falls der Hostname im Verbindungsstring nicht angegeben wurde . Die unterstützten Umgebungsvariablen variieren von Version zu Version . Schauen Sie für weitere Informationen in den PostgreSQL Programmer' s Guide (nach den libpq Umgebungsvariablen ) .

Versichen Sie sich , dass Sie die Umgebungsvariable für den aktuellen Benutzer gesetzt haben . Um sich die Umgebungsvariablen , die für den aktuellen Prozess verfügbar sind , anzeigen zu lassen , benutzen Sie $_ENV oder getenv( ) .

Beispiel 1 . Umgebungsvariablen setzen

 
PGHOST=psgql.exmaple.com

 
PGPORT=7890

 
PGDATABASE=web-system

 
PGUSER=web-user

 
PGPASSWORD=secret

 
PGDATESTYLE=ISO

 
PGTZ=JST

 
PGCLIENTENCODING=EUC-JP

 
export

 
PGHOST

 
PGPORT

 
PGDATABASE

 
PGUSER

 
PGPASSWORD

 
PGDATESTYLE

 
PGTZ

 
PGCLIENTENCODING



Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung , wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde .

PGSQL_ASSOC ( integer )

PGSQL_NUM ( integer )

PGSQL_BOTH ( integer )

PGSQL_CONNECTION_BAD ( integer )

PGSQL_CONNECTION_OK ( integer )

PGSQL_SEEK_SET ( integer )

PGSQL_SEEK_CUR ( integer )

PGSQL_SEEK_END ( integer )

PGSQL_ESCAPE_STRING ( integer )

PGSQL_ESCAPE_BYTEA ( integer )

PGSQL_EMPTY_QUERY ( integer )

PGSQL_COMMAND_OK ( integer )

PGSQL_TUPLES_OK ( integer )

PGSQL_COPY_OUT ( integer )

PGSQL_COPY_IN ( integer )

PGSQL_BAD_RESPONSE ( integer )

PGSQL_NONFATAL_ERROR ( integer )

PGSQL_FATAL_ERROR ( integer )

Beispiele

Ab der PostgreSQL Version 7.1.0 ist die maximale Grösse eines Feldes mit dem Datentyp text 1GB . Ältere PostgreSQL Versionen begrenzten Felder vom Typ text auf Blockgrösse ( normalerweise 8 KB bis maximal 32 KB , falls dies bei der Kompilation angegeben wurde ) .

Um die Large Object-Schnittstelle ( lo ) zu benutzen , ist es nötig , die Large-Object-Funktionen in einen Transaktionsblock einzuschließen . Ein Transaktionsblock beginnt mit einem SQL-Befehl BEGIN und endet , falls die Transaktion gültig war , mit COMMIT oder END . Wenn die Transaktion fehlschlägt , sollte sie mit ROLLBACK oder ABORT geschlossen werden .

Beispiel 2 . Large Objects benutzen

 
?php

 
$database

 
=

 
pg_connect

 
(

 
"dbname=jacarta")

 
;

 
pg_query

 
($database

 
,

 
"begin")

 
;

 
$oid

 
=

 
pg_lo_create

 
($database)

 
;

 
echo

 
("$oid\n")

 
;

 
$handle

 
=

 
pg_lo_open

 
($database

 
,

 
$oid

 
,

 
"w")

 
;

 
echo

 
("$handle\n")

 
;

 
pg_lo_write

 
($handle

 
,

 
"Daten

 
des

 
Large

 
Objects")

 
;

 
pg_lo_close

 
($handle)

 
;

 
pg_query

 
($database

 
,

 
"commit")

 
;

 
?



Schließen Sie zuerst das Large Object, bevor Sie die Verbindung zum PostgreSQL Server schließen.

Inhaltsverzeichnis
pg_affected_rows -- Gibt die Anzahl betroffener Datensätze (Tupel) zurück
pg_cancel_query -- Löscht eine asynchrone Abfrage
pg_client_encoding -- Liefert die Kodierung des Clients
pg_close -- Schließt eine PostgreSQL-Verbindung
pg_connect -- Öffnet eine PostgreSQL Verbindung
pg_connection_busy -- Gibt den Status der Verbindung zurück (busy/not busy)
pg_connection_reset -- Setzt die Verbindung zurück und verbindet neu
pg_connection_status -- Gibt den Verbindungsstatus zurück
pg_convert -- Convert associative array value into suitable for SQL statement.
pg_copy_from -- Fügt Datensätze aus einem Array in eine Tabelle ein
pg_copy_to -- Kopiert eine Tabelle in ein Array
pg_dbname -- Gibt den Namen der Datenbank zurück
pg_delete -- Delete records.
pg_end_copy -- Synchronisation mit dem PostgreSQL-Server
pg_escape_bytea -- Maskiert Binärdaten für den Typ bytea
pg_escape_string -- Maskiert einen String für die text/char Datentypen
pg_fetch_all -- Fetch a row as an array
pg_fetch_array -- Holt eine Zeile als Array
pg_fetch_assoc -- Fetch a row as an array
pg_fetch_object -- Holt einen Datensatz als Objekt
pg_fetch_result -- Liefert Werte aus einer Ergebnismenge
pg_fetch_row -- Holt einen Datensatz als nummerisches Array
pg_field_is_null -- Prüft, ob ein Feld NULL ist
pg_field_name -- Gibt den Namen eines Feldes zurück
pg_field_num -- Liefert die Feldnummer des angegebenen Feldes
pg_field_prtlen -- Gibt die Länge des Feldes zurück
pg_field_size -- Liefert die interne Speichergröße des bezeichneten Felds
pg_field_type -- Liefert den Feldtyp der entsprechenden Feldnummer
pg_free_result -- Gibt den durch Ergebnisse belegten Speicher frei
pg_get_notify -- Ping database connection
pg_get_pid -- Ping database connection
pg_get_result -- Gibt asynchrone Abfrageergebnisse zurück
pg_host -- Gibt den Namen des Host zurück, zu dem verbunden wurde
pg_insert -- Insert array into table.
pg_last_error -- Gibt die letzte Fehlermeldung einer Verbindung zurück
pg_last_notice -- Gibt die letzte NOTICE-Meldung des PostgreSQL-Servers zurück
pg_last_oid -- Gibt den Objektbezeichner eines neu eingefügten Datensatzes zurück
pg_lo_close -- Schließt ein Large Object
pg_lo_create -- Erzeugt ein Large Object
pg_lo_export -- Exportiert ein Large Object in eine Datei
pg_lo_import -- Importiert ein Large Object aus einer Datei
pg_lo_open -- Öffnet ein Large Object
pg_lo_read_all -- Liest ein Large Object vollständig und reicht es direkt an den Browser weiter
pg_lo_read -- Liest ein Large Object
pg_lo_seek -- Seeks position of large object
pg_lo_tell -- Returns current position of large object
pg_lo_unlink -- Löscht ein Large Object
pg_lo_write -- Schreibt in ein Large Object
pg_meta_data -- Get meta data for table.
pg_num_fields -- Gibt die Anzahl der Felder zurück
pg_num_rows -- Gibt die Anzahl der Zeilen zurück
pg_options -- Liefert die Verbindungsoptionen
pg_pconnect -- Öffnet eine persistente PostgreSQL-Verbindung
pg_ping -- Ping database connection
pg_port -- Gibt die Portnummer zurück, mit der die Verbindung aufgebaut wurde
pg_put_line -- Sendet eine NULL-terminierte Zeichenkette zum PostgreSQL-Server
pg_query -- Führt eine Abfrage aus
pg_result_error -- Gibt eine Fehlermeldung zu einer Ergebniskennung zurück
pg_result_seek -- Set internal row offset in result resource
pg_result_status -- Gibt den Status eines Abfrageergebnisses zurück
pg_select -- Select records.
pg_send_query -- Sendet eine asynchrone Abfrage
pg_set_client_encoding -- Setzt die Kodierung des Clients
pg_trace -- Ermöglicht die Protokollierung einer Verbindung
pg_tty -- Gibt den tty-Namen zurück, der mit der Verbindung verknüpft ist.
pg_unescape_bytea -- Escape binary for bytea type
pg_untrace -- Beendet die Protokollierung der Verbindung
pg_update -- Update table.