|  | LXXX. Функции PostgreSQLPostgres, разработанный в оригинале департаментом UC Berkeley Computer Science
Department, был пионером многих объектно-ориентированных концепций, ставших 
теперь доступными в некоторых коммерческих БД.  Он предоставляет поддержку языка
SQL92/SQL99, целостности транзакций и расширяемости типов.  PostgreSQL это 
открытый ресурс, потомок оригинального Berkeley-кода. PostgreSQL database это открывает Source-продукт, доступный бесплатно. Для 
использования поддержки PostgreSQL вам необходим PostgreSQL 6.5 или новее. PostgreSQL 7.0 
или новее - для всех возможностей модуля PostgreSQL. PostgreSQL поддерживает 
многие кодировки символов, включая кодировку многобайтных символов. Текущая 
версия и информация о PostgreSQL находятся на https://www.postgresql.org/. Чтобы включить поддержку PostgreSQL, необходима опция --with-pgsql[=DIR] при компиляции
PHP. Если модуль совместно используемых/shared объектов доступен, PostgreSQL-модуль 
может быть загружен с использованием директивы extension в файле
php.ini или функции dl(). Поддерживаемые ini-директивы описаны в файле
php.ini-dist, поставляемом вместе с исходным кодом дистрибутива. 
| Предупреждение! | 
|---|
 | Использование модуля PostgreSQL с PHP 4.0.6 не рекомендуется из-за жучка в
коде обработки уведомляющих сообщений. Используйте 4.1.0 или новее. |  | Предупреждение! | 
|---|
 | Имена PostgreSQL-функций будут изменены в релизе 4.2.0 для подтверждения соответствия существующим стандартам кодировки. Большая 
часть новых имён будет иметь дополнительные символы подчёркивания, например, pg_lo_open(). Некоторые функции переименовываются для 
обеспечения целостности. например, pg_exec() в pg_query(). Старые имена можно использовать в 4.2.0 и в некоторых релизах 4.2.0, 
но они могут быть удалены в будущем. Таблица 1. Изменения имён функцийСтарый синтаксис pg_connect()/
pg_pconnect() будет не рекомендован, с целью поддержки в будущем асинхронных соединений. 
Пожалуйста, используйте строку соединения для pg_connect()
и pg_pconnect(). | 
 Не все функции поддерживаются во всех построениях/builds. Это зависит отверсии вашей
libpq (The PostgreSQL C Client interface) и от того, как libpq 
скомпилирована. Если имеется отсутствующая функция, libpq не поддерживает возможности, требуемые для этой функции. Важно также, чтобы вы использовали libpq более новую, чем PostgreSQL
Server, с которым соединяетесь. Если вы используете libpq более старую, чем ожидает PostgreSQL Server, у вас будут проблемы. Начиная с версии 6.3 (03/02/1998), PostgreSQL использует по умолчанию сокет 
домена unix. TCP-порт НЕ открывается по умолчанию. В таблице описаны эти новые 
возможности соединений. Этот сокет можно найти в in /tmp/.s.PGSQL.5432.
Данная опция может быть включена флагом '-i' для postmaster, и его значением будет : "прослушивать
TCP/IP-сокеты, а также сокеты Unix-домена". Таблица 2. Postmaster и PHP| Postmaster | PHP | Статус | 
|---|
 | postmaster & | pg_connect("dbname=MyDbName"); | OK |  | postmaster -i & | pg_connect("dbname=MyDbName"); | OK |  | postmaster & | pg_connect("host=localhost dbname=MyDbName"); | Невозможно соединиться с PostgreSQL server: connectDB() терпит неудачу:
Работает ли postmaster и принимает ли TCP/IP (with -i) соединение по 'localhost' и порту '5432'? в
/path/to/file.php на строке 20. |  | postmaster -i & | pg_connect("host=localhost dbname=MyDbName"); | OK | 
 Соединение с PostgreSQL-сервером может быть установлено следующими парами значений в командной строке:
$conn = pg_connect("host=myHost port=myPort tty=myTTY options=myOptions
dbname=myDB user=myUser password=myPassword "); Предыдущий синтаксис: $conn = pg_connect ("host", "port", "options", "tty", "dbname")
теперь не рекомендуется. Переменные окружения влияют на поведение PostgreSQL server/client. Например, PostgreSQL-модель 
будет искать переменную окружения PGHOST, если hostname отсутствует в строке 
соединения. Поддерживаемые переменные окружения отличаются в разных версиях. 
См. детали в PostgreSQL Programmer's Manual (libpq - Environment Variables). Убедитесь, что вы установили переменные окружения для соответствующего пользователя. Используйте
$_ENV или getenv() для проверки того, какие переменные окружения доступны текущему процессу. | Пример 1. Установка параметров по умолчанию
 | PGHOST=pgsql.example.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 | 
 | 
 Начиная работу с PostgreSQL 7.1.0, вы можете сохранять 1GB в поле типа text. 
В более старых версиях могут быть ограничения на размер блоков (по умолчанию 
было 8KB, максимум был 32KB, определяемые на этапе компиляции). Для использования интерфейса больших объектов/large object (lo) необходимо включать
lo-функции внутри блока транзакции. Блок транзакции начинается с SQL-оператора BEGIN, и, если транзакция была верной, заканчивается
COMMIT или END. Если транзакция терпит неудачу, она должна быть закрыта с помощью
ROLLBACK или ABORT. | 
Пример 2. Использование больших объектов (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");
?> |  | 
 Вы не должны закрывать соединение с PostgreSQL-сервером до закрытия large object. Содержаниеpg_affected_rows - возвращает количество задействованных записей (пар/tuples)pg_cancel_query - отменяет async-запросpg_client_encoding - получает клиентскую кодировкуpg_close - закрывает a PostgreSQL-соединениеpg_connect - открывает a PostgreSQL-соединениеpg_connection_busy - получает, закрыто соединение или нетpg_connection_reset - восстанавливает соединение (reconnect)pg_connection_status - получает статус соединенияpg_convert - конвертирует значение ассоциативного массива в значение, подходящее для оператора SQLpg_copy_from - вставляет записи в таблицу из массиваpg_copy_to - копирует таблицу в массивpg_dbname - получает имя базы данныхpg_delete - удаляет записиpg_end_copy - синхронизирует с PostgreSQL backendpg_escape_bytea - мнемонизирует/еscape binary для типа byteapg_escape_string - мнемонизирует string для типа text/charpg_fetch_array - извлекает ряд как массивpg_fetch_object - извлекает ряд как объектpg_fetch_result - возвращает значения из результирующего ресурсаpg_fetch_row - получает ряд как перечислимый массивpg_field_is_null - проверяет, является ли поле NULLpg_field_name - возвращает имя поляpg_field_num - возвращает номер именованного поляpg_field_prtlen - возвращает печатаемый размерpg_field_size - возвращает внутренний размер хранения именованного поляpg_field_type - возвращает имя типа для соответствующего номера поляpg_free_result - освобождает результирующую памятьpg_get_result -  получает результат асинхронного запросаpg_host - возвращает имя хоста, ассоциированного с соединениемpg_insert - вставляет массив в таблицуpg_last_error - получает строку последнего сообщения об ошибке соединенияpg_last_notice - возвращает последнее уведомление от PostgreSQL-сервераpg_last_oid - возвращает oid последнего объектаpg_lo_close - закрывает large objectpg_lo_create - создаёт large objectpg_lo_export - экспортирует large object в файлpg_lo_import - импортирует large object из файлаpg_lo_open - открывает large objectpg_lo_read_all - читает весь large object и отправляет его браузеруpg_lo_read - читает large objectpg_lo_seek - ищет позицию large object'аpg_lo_tell - возвращает текущую позицию large object'аpg_lo_unlink - удаляет large objectpg_lo_write - записывает large objectpg_metadata - получает метаданные для таблицыpg_num_fields - возвращает количество полейpg_num_rows - возвращает количество рядовpg_options - получает опции, ассоциированные с данным соединениемpg_pconnect - открывает постоянное PostgreSQL-соединениеpg_port - возвращает номер порта, ассоциированного с соединениемpg_put_line - отправляет NULL-законченную строку в PostgreSQL backendpg_query - выполняет запросpg_result_error - получает сообщение об ошибке, ассоциированное с результатомpg_result_status - получает статус результата выполнения запросаpg_select - выбирает записиpg_send_query - отправляет асинхронный запрос/querypg_set_client_encoding - устанавливает клиентскую кодировкуpg_trace - включает трассировку PostgreSQL-соединенияpg_tty - возвращает tty-имя, ассоциированное с соединениемpg_untrace - отключает трассировку PostgreSQL-соединенияpg_update - обновляет таблицу
 |  |