| Документация по PostgreSQL 9.4.1 | |||
|---|---|---|---|
| Пред. | Уровень выше | Глава 31. libpq — библиотека для языка C | След. | 
31.2. Функции, описывающие текущее состояние подключения
Эти функции могут использоваться для опроса состояния объекта, описывающего существующее подключение к базе данных.
Подсказка: Разработчики приложений на основе libpq должны тщательно поддерживать абстракцию PGconn. Следует использовать функции доступа, описанные ниже, для получения содержимого PGconn. Обращение напрямую к внутренним полям PGconn, используя сведения из libpq-int.h, не рекомендуется, поскольку они могут измениться в будущем.
Следующие функции возвращают значения параметров, установленные при подключении. Эти значения фиксированы на время жизни объекта PGconn.
- PQdb
- Возвращает имя базы данных, с которой установлено соединение. - char *PQdb(const PGconn *conn); 
- PQuser
- Возвращает имя пользователя, который установил соединение. - char *PQuser(const PGconn *conn); 
- PQpass
- Возвращает пароль, использованный для подключения. - char *PQpass(const PGconn *conn); 
- PQhost
- Возвращает имя сервера, с которым установлено соединение. - char *PQhost(const PGconn *conn); 
- PQport
- Возвращает номер порта, на котором установлено соединение. - char *PQport(const PGconn *conn); 
- PQtty
- Возвращает имя отладочного терминала (TTY), связанного с данным соединением. (Это устаревшая функция, поскольку сервер более не обращает внимания на установку TTY, но она остаётся для обеспечения обратной совместимости.) - char *PQtty(const PGconn *conn); 
- PQoptions
- Возвращает параметры командной строки, переданные в запросе на подключение. - char *PQoptions(const PGconn *conn); 
Следующие функции возвращают данные статуса, который может измениться в процессе выполнения операций на объекте PGconn.
- PQstatus
- Возвращает состояние подключения. - ConnStatusType PQstatus(const PGconn *conn); - Статус может принимать одно из ряда значений. Однако, только два из них видны извне процедуры асинхронного подключения: CONNECTION_OK и CONNECTION_BAD. Успешное подключение к базе данных имеет статус CONNECTION_OK. О неудачной попытке подключения сигнализирует статус CONNECTION_BAD. Обычно статус OK остаётся таковым до вызова - PQfinish, но сбой в коммуникации может привести к тому, что статус изменится на CONNECTION_BAD преждевременно. В таком случае приложение может попытаться восстановиться, вызвав- PQreset.- См. статьи, посвященные - PQconnectStartParams,- PQconnectStartи- PQconnectPoll, относительно других кодов статуса, которые могут быть возвращены этими функциями.
- PQtransactionStatus
- Возвращает текущий статус сервера, отражающий процесс выполнения транзакций. - PGTransactionStatusType PQtransactionStatus(const PGconn *conn); - Статус может быть одним из PQTRANS_IDLE (в настоящее время не занят обработкой транзакции), PQTRANS_ACTIVE (команда в процессе обработки), PQTRANS_INTRANS (не выполняет работу, но находится в рамках действительной транзакции) или PQTRANS_INERROR (не выполняет работу, но находится в рамках транзакции, завершившейся сбоем). Статус принимает значение PQTRANS_UNKNOWN, если соединение не работает. Статус принимает значение PQTRANS_ACTIVE только тогда, когда запрос был отправлен серверу, но ещё не завершён. 
- PQparameterStatus
- Отыскивает текущее значение параметра сервера. - const char *PQparameterStatus(const PGconn *conn, const char *paramName); - Значения определённых параметров сервер сообщает автоматически в начале процедуры подключения или тогда, когда их значения изменяются. - PQparameterStatusможно использовать, чтобы запросить эти значения. Функция возвращает текущее значение параметра, если оно известно, или NULL, если параметр неизвестен.- Параметры, значения которых сообщает сервер, в текущей версии включают server_version, server_encoding, client_encoding, application_name, is_superuser, session_authorization, DateStyle, IntervalStyle, TimeZone, integer_datetimes и standard_conforming_strings. (Значения параметров server_encoding, TimeZone и integer_datetimes сервер до версии 8.0 не сообщал; standard_conforming_strings сервер до версии 8.1 не сообщал; IntervalStyle сервер до версии 8.4 не сообщал; application_name сервер до версии 9.0 не сообщал.) Учтите, что server_version, server_encoding и integer_datetimes нельзя изменить после запуска. - Серверы, поддерживающие протокол только до версии 3.0, не могут сообщать установки параметров, но libpq включает средства, чтобы получить значения для server_version и client_encoding в любом случае. Поощряется использование в приложениях - PQparameterStatus, а не специально написанного (ad hoc) кода, для определения этих значений. (Примите к сведению, однако, что в соединениях, основанных на протоколе версии до 3.0, изменение client_encoding посредством команды SET после начала процедуры подключения не будет отражаться функцией- PQparameterStatus.) Сведения о server_version приведены также в описании функции- PQserverVersion, возвращающей информацию в числовой форме, в которой гораздо легче выполнять сравнение.- Если для standard_conforming_strings не передано никакого значения, то приложения могут принять его равным off. Это означает, что символы обратной косой черты в строковых литералах интерпретируются в качестве спецсимволов. Также, наличие этого параметра может рассматриваться как указание на то, что синтаксис escape-строк (E'...') является приемлемым. - Хотя возвращаемый указатель объявлен со спецификатором const, фактически он указывает на изменяемое хранилище, связанное со структурой PGconn. Не стоит рассчитывать на то, что указатель останется действительным при последующих запросах. 
- PQprotocolVersion
- Запрашивает протокол, используемый между клиентом и сервером. - int PQprotocolVersion(const PGconn *conn); - Приложения могут использовать эту функцию, чтобы определить, поддерживаются ли опредёленные функциональные возможности. В настоящее время возможными значениями являются 2 (протокол версии 2.0), 3 (протокол версии 3.0) или ноль (проблемы в подключении). Версия протокола не будет изменяться после завершения процедуры подключения, но теоретически она могла бы измениться в процессе переподключения. Версия протокола 3.0 обычно используется при взаимодействии с серверами PostgreSQL версии 7.4 или более поздними; серверы до версии 7.4 поддерживают только протокол версии 2.0. (Протокол версии 1.0 является устаревшим и не поддерживается библиотекой libpq.) 
- PQserverVersion
- Возвращает целое число, представляющее версию сервера. - int PQserverVersion(const PGconn *conn); - Приложения могут использовать эту функцию, чтобы определить версию сервера баз данных, к которому они подключены. Число формируется путём преобразования номеров старшей, младшей и корректирующей версий в двузначные десятичные числа и соединения их вместе. Например, для версии 8.1.5 будет возвращено число 80105, а для версии 8.2 будет возвращено число 80200 (ведущие нули не показаны). Если соединение не работает, то возвращается ноль. 
- PQerrorMessage
- Возвращает сообщение об ошибке, наиболее недавно сгенерированное операцией, выполненной в рамках текущего подключения. - char *PQerrorMessage(const PGconn *conn); - Почти все функции библиотеки libpq в случае сбоя сформируют сообщение для - PQerrorMessage. Обратите внимание, что по соглашениям, принятым в libpq, непустой результат функции- PQerrorMessageможет состоять из нескольких строк и будет включать завершающий символ новой строки. Вызывающая функция не должна освобождать память, на которую указывает возвращаемое значение, напрямую. Она будет освобождена, когда связанный с ней дескриптор PGconn будет передан функции- PQfinish. Не стоит ожидать, что результирующая строка останется той же самой при выполнении нескольких операций со структурой PGconn.
- PQsocket
- Получает номер файлового дескриптора для сокета соединения с сервером. Действительный дескриптор будет больше или равен 0; значение -1 показывает, что в данный момент не открыто ни одного соединения с сервером. (Значение не изменится во время обычной работы, но может измениться во время установки или переустановки подключения.) - int PQsocket(const PGconn *conn); 
- PQbackendPID
- Возвращает ID (PID) серверного процесса, обрабатывающего это подключение. - int PQbackendPID(const PGconn *conn); - PID серверного процесса полезен для отладочных целей и для сопоставления с сообщениями команды NOTIFY (которые включают PID уведомляющего серверного процесса). Примите к сведению, что PID принадлежит процессу, выполняющемуся на компьютере сервера баз данных, а не на локальном компьютере. 
- PQconnectionNeedsPassword
- Возвращает true (1), если метод аутентификации соединения требовал пароля, однако он не был предоставлен. Возвращает false (0), если пароль не требовался. - int PQconnectionNeedsPassword(const PGconn *conn); - Эту функцию можно применить после неудачной попытки подключения, чтобы решить, нужно ли предлагать пользователю ввести пароль. 
- PQconnectionUsedPassword
- Возвращает true (1), если метод аутентификации соединения использовал пароль. Возвращает false (0) в противном случае. - int PQconnectionUsedPassword(const PGconn *conn); - Эту функцию можно применить как после неудачной, так и после успешной попытки подключения, чтобы определить, требовал ли сервер предоставления пароля. 
- PQgetssl
- Возвращает структуру SSL, использовавшуюся в соединении, или null, если SSL не используется. - void *PQgetssl(const PGconn *conn); - Эта структура может использоваться, чтобы сличить уровни шифрования, проверить сертификаты сервера и т. д. За информацией об этой структуре обратитесь к документации по OpenSSL. - Фактическое возвращаемое значение имеет тип SSL *, где SSL является типом, определённым в библиотеке OpenSSL. Но оно не объявлено именно таким образом, чтобы избежать требования включать заголовочные файлы OpenSSL. Чтобы использовать эту функцию, можно следовать приведённому ниже фрагменту кода: - #include <libpq-fe.h> #include <openssl/ssl.h> ... SSL *ssl; dbconn = PQconnectdb(...); ... ssl = PQgetssl(dbconn); if (ssl) { /* используйте функции OpenSSL для доступа к ssl */ }
| Пред. | Начало | След. | 
| Функции управления подключением к базе данных | Уровень выше | Функции для исполнения команд |