Forum und email
PostgreSQL

CXXV. PostgreSQL

PostgreSQL, stworzony początkowo na Wydziale Nauk Komputerowych Uniwersytetu Berkeley, był pionierem wielu koncepcji obiektowych obecnie dostępnych w komercyjnych bazach danych. Jest zgodny z ze standardami języka SQL92/SQL3, obsługuje transakcje i pozwala definiować własne typy danych. PostgreSQL jest wolno-dostępnym spadkobiercą oryginalnego kodu Berkeley.

PostgreSQL jest produktem Open Source i jest dostępny za darmo. Aby korzystać wsparcia dla PosgreSQL-a, będziesz potrzebował PostgreSQL w wersji 6.5 lub nowszej. Aby wykorzystać wszystkie możliwości modułu potrzebny jest PostgreSQL 7.0 lub nowszy. PostgreSQL wspiera wiele stron kodowych, z wielobajtowymi włącznie. Aktualna wersja i więcej informacji jest dostępne tu: https://www.postgresql.org/.

W celu uruchomienia wsparcia dla PostgreSQL-a, należy użyć opcji --with-pgsql[=DIR] w czasie kompilacji PHP. Jeśli jest dostępny współdzielony moduł, może on być załadowany przez wpisanie dyrektywy extension w pliku php.ini lub funkcji dl(). Wspierane dyrektywy ini są opisane w pliku php.ini-dist który jest zawarty w dystrybucji źródłowej.

Ostrzeżenie

Używanie modułu PostgreSQL z PHP 4.0.6 nie jest zalecane ze względu na błąd w obsłudze komunikatów. Zaleca się używanie wersji 4.1.0 lub nowszej.

Ostrzeżenie

Nazwy funkcji PostgreSQL będą zmienione w wersji 4.2.0 w celu dostosowania do obecnych standardów kodowania. Większość nowych nazw będzie miała dodatkowe podkreślenia np. pg_lo_open(). Niektóre funkcje będą miały zmienione nazwy, aby ujednolicić nazewnictwo np. pg_exec() na pg_query(). Stare nazwy będzie można używać w wersji 4.2.0 i w kilku kolejnych, mogą jednak być usunięte w przyszłości.

Tabela 1. Zmienione nazwy funkcji

Stara nazwaNowa nazwa
pg_exec()pg_query()
pg_getlastoid()pg_last_oid()
pg_cmdtuples()pg_affected_rows()
pg_numrows()pg_num_rows()
pg_numfields()pg_num_fields()
pg_fieldname()pg_field_name()
pg_fieldsize()pg_field_size()
pg_fieldnum()pg_field_num()
pg_fieldprtlen()pg_field_prtlen()
pg_fieldisnull()pg_field_is_null()
pg_freeresult()pg_free_result()
pg_result()pg_fetch_result()
pg_loreadall()pg_lo_read_all()
pg_locreate()pg_lo_create()
pg_lounlink()pg_lo_unlink()
pg_loopen()pg_lo_open()
pg_loclose()pg_lo_close()
pg_loread()pg_lo_read()
pg_lowrite()pg_lo_write()
pg_loimport()pg_lo_import()
pg_loexport()pg_lo_export()

Stara składnia pg_connect()/ pg_pconnect() będzie wycofywana aby zapewnić w przyszłości wsparcie dla asynchronicznych połączeń. Prosimy używać łańcucha połączeniowego dla pg_connect() i pg_pconnect().

Nie wszystkie funkcje są wspierane przez wszystkie wersje. Zależy to od twojej wersji libpq (Interfejs C klienta PostgreSQL) i sposobu jej kompilacji. Jeśli brakuje jakiejś funkcji, libpq nie będzie wspierać danej funkcjonalności.

Jest istotne żeby używać nowszej biblioteki libpq niż serwer PostgreSQL z którym się łączymy. Jeśli libpq jest starsze niż oczekiwane przez serwer PostgreSQL, możesz mieć problemy.

Od wersji 6.3 (03/02/1998) PostgreSQL używa gniazdek domen unixowych ("unix domain socket"). Port TCP NIE będzie domyślnie otwarty. Poniższa tabela pokazuje te nowe rodzaje połączeń. Plik gniazdka znajduje się w /tmp/.s.PGSQL.5432. Ta opcja może być odblokowana przez użycie flagi '-i' z poleceniem postmaster i oznacza: "nasłuchuj na gniazdkach TCP/IP oraz na gniazdkach domen unixowych".

Tabela 2. PostgreSQL Postmaster i PHP

PostmasterPHPStatus
postmaster &pg_connect("dbname=MyDbName");OK
postmaster -i &pg_connect("dbname=MyDbName");OK
postmaster &pg_connect("host=localhost dbname=MyDbName"); Unable to connect to PostgreSQL server: connectDB() failed: Is the postmaster running and accepting TCP/IP (with -i) connection at 'localhost' on port '5432'? in /path/to/file.php on line 20.
postmaster -i &pg_connect("host=localhost dbname=MyDbName");OK

Połączenie do serwera PostgreSQL może być nawiązane poprzez ustawienie następujących wartości w łańcuchu połączenia: $conn = pg_connect("host=myHost port=myPort tty=myTTY options=myOptions dbname=myDB user=myUser password=myPassword ");

Poprzednia składnia: $conn = pg_connect ("host", "port", "options", "tty", "dbname") jest wycofywana.

Zmienne środowiskowe wpływają na zachowanie klienta i serwera PostgreSQL. Przykładowo, moduł PostgreSQL będzie poszukiwał zmiennej PGHOST kiedy nazwa serwera będzie pominięta w łańcuchu połączeniowym. Używane zmienne środowiskowe zmieniają się wraz z wersjami. Szczegóły można znaleźć w PostgreSQL Programmer's Manual (libpq - Environment Variables).

Upewnij się że ustawiłeś zmienne środowiskowe dla właściwego użytkownika. Użyj $_ENV lub getenv() aby sprawdzić jakie zmienne środowiskowe są dostępne dla bieżącego procesu.

Przykład 1. Ustawianie domyślnych parametrów

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

Poczynając od PostgreSQL 7.1.0, jedno pole typu text może pomieścić do 1GB. Wcześniejsze wersje limitowały wielkość pola do rozmiaru bloku (domyślnie 8KB, maksymalnie 32KB, definiowane przy kompilacji).

Użycie interfejsu wielkich obiektów (LO - Large Objects) wymaga zamknięcia go wewnątrz bloku transakcji. Transakcja rozpoczyna się poleceniem SQL BEGIN i - jeśli transakcja się powiedzie - kończy się poleceniem COMMIT lub END. Jeśli transakcja nie powiedzie się, powinna być zakończona poleceniem ROLLBACK lub ABORT.

Przykład 2. Używanie wielkich obiektów (Large Objects)

<?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, "large object data");
    
pg_lo_close ($handle);
    
pg_query ($database, "commit");
?>
Nie wolno zamykać połączenia do serwera PostgreSQL, przed zamknięciem wielkiego obiektu.

Spis treści
pg_affected_rows -- Zwraca liczbÄ™ zmodyfikowanych wierszy
pg_cancel_query --  Przerywa zapytanie asynchroniczne
pg_client_encoding --  Zwraca stronÄ™ kodowÄ… klienta
pg_close -- Zamyka połączenie z PostgreSQL
pg_connect -- Otwiera tymczasowe połączenie do PostgreSQL-a
pg_connection_busy --  Sprawdza czy połączenie jest zajÄ™te czy wolne
pg_connection_reset --  Restartuje połączenie
pg_connection_status --  Zwraca stan połączenia
pg_convert --  Konwertuje tablicÄ™ asocjacyjnÄ… na postać użytecznÄ… w zapytaniu SQL.
pg_copy_from --  Wstawia wiersze do tabeli z tablicy
pg_copy_to --  Kopiuje tabele do tablicy
pg_dbname -- Podaje nazwÄ™ bazy danych
pg_delete --  Usuwa wiersze
pg_end_copy -- Synchronizuje klienta z serwerem PostgreSQL.
pg_escape_bytea --  Konwertuje Å‚aÅ„cuch wstawiajÄ…c sekwencje Escape dla typu bytea
pg_escape_string --  Konwertuje Å‚aÅ„cuch wstawiajÄ…c sekwencje Escape dla typu text/char
pg_execute -- Sends a request to execute a prepared statement with given parameters, and waits for the result.
pg_fetch_all_columns -- Fetches all rows in a particular result column as an array
pg_fetch_all -- Fetches all rows from a result as an array
pg_fetch_array -- Pobiera wiersz jako tablicÄ™
pg_fetch_assoc -- Fetch a row as an associative array
pg_fetch_object -- Pobiera wiersz jako obiekt
pg_fetch_result -- Pobiera dane z wyniku
pg_fetch_row -- Pobiera wiersz jako tablicÄ™ z indeksami numerycznymi
pg_field_is_null -- Sprawdza czy pole zawiera NULL
pg_field_name -- Zwraca nazwÄ™ kolumny
pg_field_num -- Zwraza numer kolumny o podanej nazwie
pg_field_prtlen -- Zwraca drukowalnÄ… dÅ‚ugość
pg_field_size --  Zwraca wewnÄ™trzny rozmiar kolumny
pg_field_table -- Returns the name or oid of the tables field
pg_field_type_oid --  Returns the type ID (OID) for the corresponding field number
pg_field_type --  Zwraca typ wskazanej kolumny
pg_free_result -- Zwalnia pamięć wyniku
pg_get_notify -- Gets SQL NOTIFY message
pg_get_pid -- Gets the backend's process ID
pg_get_result --  Zwraca wynik zapytania asynchroniczego
pg_host --  Zwraca nazwÄ™ komputera zwiÄ…zanÄ… z identyfikatorem połączenia
pg_insert --  Wstawia tablicÄ™ do tabeli
pg_last_error -- Zwraca ostatni komunikat błędu zwiÄ…zany z połączeniem
pg_last_notice --  Zwraca komunikaty informacyjne serwera PostgreSQL
pg_last_oid -- Zwraca identyfikator ostatniego obiektu
pg_lo_close -- Zamyka wielki obiekt (Large Object - LO)
pg_lo_create -- Tworzy wielki obiekt (Large Object - LO)
pg_lo_export -- Eksportuje wielki obiekt (Large Object - LO) do pliku
pg_lo_import -- Importuje wielki obiekt (Large Object - LO) z pliku
pg_lo_open -- Otwiera wielki obiekt (Large Object - LO)
pg_lo_read_all --  Odczytuje wielki obiekt (Large Object - LO) i wysÅ‚a go do przeglÄ…darki
pg_lo_read -- Odczytuje wielki obiekt (Large Object - LO)
pg_lo_seek --  Przemieszcza wskaźnik poÅ‚ożenia w wielkim obiekcie (Large Object - LO)
pg_lo_tell --  Zwraca wskaźnik poÅ‚ożenia w wielkim obiekcie (Large Object - LO)
pg_lo_unlink -- Usuwa wielki obiekt (Large Object - LO)
pg_lo_write -- Zapisuje do wielkiego obiektu (Large Object - LO)
pg_meta_data --  Pobiera informacje o tabeli
pg_num_fields -- Zwraca liczbÄ™ kolumn
pg_num_rows -- Zwraca liczbÄ™ wierszy
pg_options -- Podaje opcje powiÄ…zane z połączenim
pg_parameter_status -- Looks up a current parameter setting of the server.
pg_pconnect -- Otwiera staÅ‚e połączenie do serwera PostgreSQL
pg_ping -- Ping database connection
pg_port --  Zwraca numer portu zwiÄ…zany z połączeniem
pg_prepare --  Submits a request to create a prepared statement with the given parameters, and waits for completion.
pg_put_line -- WysyÅ‚a Å‚aÅ„cuch zakoÅ„czony znakiem NULL do serwera PostgreSQL
pg_query_params -- Submits a command to the server and waits for the result, with the ability to pass parameters separately from the SQL command text.
pg_query -- Wykonuje zapytanie do bazy
pg_result_error_field -- Returns an individual field of an error report.
pg_result_error --  Zwraca błąd zwiÄ…zany z identyfikatorem wyniku
pg_result_seek -- Set internal row offset in result resource
pg_result_status --  Zwraca stan wyniku
pg_select --  Wybiera wiersze
pg_send_execute -- Sends a request to execute a prepared statement with given parameters, without waiting for the result(s).
pg_send_prepare -- Sends a request to create a prepared statement with the given parameters, without waiting for completion.
pg_send_query_params -- Submits a command and separate parameters to the server without waiting for the result(s).
pg_send_query --  WysyÅ‚a zapytanie asynchroniczne
pg_set_client_encoding --  Ustawia stronÄ™ kodowÄ… klienta PostgreSQL-a
pg_set_error_verbosity --  Determines the verbosity of messages returned by pg_last_error() and pg_result_error().
pg_trace -- Uruchamia Å›ledzenie połączeÅ„ z PostgreSQL
pg_transaction_status -- Returns the current in-transaction status of the server.
pg_tty --  Zwraca nazwÄ™ konsoli tty zwiÄ…zanej z połączeniem
pg_unescape_bytea --  Unescape binary for bytea type
pg_untrace -- Wyłącza Å›ledzenie połączeÅ„ PostgreSQL-a
pg_update --  Aktualizuje tabelÄ™.
pg_version --  Returns an array with client, protocol and server version (when available)