Данные функции могут использоваться для опроса состояния существующего объекта соединения с базой данных.
libpq разработчикам приложений следует соблюдать осторожность для сохранения PGconn абстракции. Используйте описанные ниже функции доступа для обращения к содержимому PGconn.
Ссылка на внутреннюю структуру PGconn поля, использующие
libpq-int.h не рекомендуется, так как в будущем они могут быть изменены.
Следующие функции возвращают значения параметров, установленные при установке соединения.
Данные значения являются фиксированными на протяжении всего времени существования соединения. Если используется строка подключения с несколькими узлами, значения PQhost,
PQport, и PQpass могут измениться при установке нового соединения с использованием того же самого PGconn объекта. Другие значения
являются фиксированными на протяжении всего времени существования PGconn объекта.
PQdb #Данная функция возвращает имя базы данных для текущего соединения.
char *PQdb(const PGconn *conn);
PQuser #Данная функция возвращает имя пользователя для текущего соединения.
char *PQuser(const PGconn *conn);
PQpass #Данная функция возвращает пароль для текущего соединения.
char *PQpass(const PGconn *conn);
PQpass возвратит либо указанный пароль
в параметрах соединения, либо, если он там отсутствовал и пароль
был получен из паролей
файла, функция вернет это значение. В последнем случае,
если в параметрах соединения было указано несколько хостов, то
полагаться на результат выполнения функции нельзя до тех пор, PQpass пока
не будет установлено соединение. Статус соединения может быть
проверен с помощью функции PQstatus.
PQhost #
Функция возвращает имя хоста сервера для активного соединения.
Это может быть имя хоста, IP-адрес или путь к каталогу, если
соединение установлено через сокет Unix. (Случай с использованием пути можно отличить,
так как он всегда будет абсолютным и будет начинаться с
при взаимодействии с /.)
char *PQhost(const PGconn *conn);
Если в параметрах соединения были указаны оба значения, host и
hostaddr, то PQhost будет
возвращать host информацию. Если же был указан только
hostaddr параметр, то возвращается именно это значение.
Если в параметрах соединения было указано несколько хостов,
PQhost функция возвращает хост, с которым фактически установлено соединение.
PQhost возвращает значение NULL в случае,
объект conn аргумент значение NULL.
В противном случае, если при получении информации о хосте возникла ошибка (например,
если соединение не было полностью установлено или произошла
ошибка), функция возвращает пустую строку.
Если в параметрах соединения было указано несколько хостов, то это
полагаться на результат выполнения функции нельзя до тех пор, PQhost пока
не будет установлено соединение. Статус соединения может быть
проверен с помощью функции PQstatus.
PQhostaddr #
Возвращает IP-адрес сервера для активного соединения.
Это может быть адрес, в который было разрешено имя хоста,
или IP-адрес, переданный через hostaddr
параметр.
char *PQhostaddr(const PGconn *conn);
PQhostaddr возвращает значение NULL в случае,
объект conn аргумент значение NULL.
В противном случае, если при получении информации об узле возникла ошибка
(вероятно, когда соединение не было полностью установлено или
произошла ошибка), функция возвращает пустую строку.
PQport #Возвращает номер порта активного соединения.
char *PQport(const PGconn *conn);
Если в параметрах соединения было указано несколько портов,
PQport возвращается номер порта, к которому фактически было выполнено подключение.
PQport возвращает значение NULL в случае,
объект conn аргумент значение NULL.
В противном случае, если при получении информации о порте возникла ошибка (возможно,
если соединение не было полностью установлено или произошла
ошибка), функция возвращает пустую строку.
Если в параметрах соединения было указано несколько портов,
полагаться на результат выполнения функции нельзя до тех пор, PQport пока
не будет установлено соединение. Статус соединения может быть
проверен с помощью функции PQstatus.
PQtty #
Данная функция более не выполняет никаких действий, но сохранена для обеспечения обратной
совместимости. Функция всегда возвращает пустую строку или,
значение NULL если объект conn аргумент
значение NULL.
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
если этот параметр неизвестен.
К параметрам, сообщаемым в текущей версии, относятся:
application_name | is_superuser |
client_encoding | scram_iterations |
DateStyle | server_encoding |
default_transaction_read_only | server_version |
in_hot_standby | session_authorization |
integer_datetimes | standard_conforming_strings |
IntervalStyle | TimeZone |
(default_transaction_read_only и
in_hot_standby не передавались в версиях до
14; scram_iterations не передавался в версиях
до 16.)
Обратите внимание, что
server_version,
server_encoding и
integer_datetimes
не могут быть изменены после запуска.
Если значение для параметра standard_conforming_strings не сообщается,
приложения могут считать, что оно равно off, то есть обратные косые черты
интерпретируются как escape-последовательности в строковых литералах. Кроме того, наличие
данного параметра может служить признаком того, что поддерживается синтаксис строк с escape-последовательностями
(E'...')
Хотя возвращаемый указатель объявлен с модификатором const, фактически он
указывает на изменяемую область памяти, связанную со PGconn структурой типа PGconn.
Не следует полагать, что указатель останется действительным после выполнения последующих запросов.
PQprotocolVersion #Запрашивает версию используемого протокола взаимодействия клиента и сервера (frontend/backend).
int PQprotocolVersion(const PGconn *conn);
Приложения могут использовать данную функцию для определения поддержки определенных функциональных возможностей. В настоящее время допустимыми значениями являются 3 (протокол версии 3.0) или ноль (некорректное соединение). Версия протокола не будет меняться после завершения установки соединения, однако теоретически она может измениться при сбросе соединения. Протокол версии 3.0 поддерживается Digital Q.DataBase серверами версий 7.4 и выше.
PQserverVersion #Функция возвращает целое число, представляющее версию сервера.
int PQserverVersion(const PGconn *conn);
Приложения могут использовать данную функцию для определения версии сервера баз данных, к которому они подключены. Результат вычисляется путем умножения номера мажорной версии сервера на 10000 и прибавления номера минорной версии. Например, для версии 10.1 будет возвращено значение 100001, а для версии 11.0 — 110000. В случае неисправного соединения возвращается ноль.
До мажорной версии 10 Digital Q.DataBase использовался
трехкомпонентные номера версий, в которых первые две части
в совокупности представляли мажорную версию. Для таких
версий PQserverVersion для каждой части выделяется по две
цифры; например, версия 9.1.5 будет возвращена в виде числа 90105, а
версия 9.2.0 — в виде числа 90200.
Следовательно, для определения совместимости функций
приложения должны делить результат функции PQserverVersion
на 100, а не на 10000, чтобы вычислить логический номер мажорной версии.
Во всех сериях выпусков только последние две цифры различают
минорные выпуски (выпуски с исправлением ошибок).
PQerrorMessage
#Возвращает сообщение об ошибке, сформированное последней операцией через объект conn.
char *PQerrorMessage(const PGconn *conn);
Практически все libpq функции в случае сбоя формируют сообщение для
PQerrorMessage
объекта conn. Следует отметить, что согласно
libpq принятому соглашению непустой
PQerrorMessage
результат может состоять из нескольких строк
и содержать в конце символ новой строки. Вызывающая программа не должна освобождать
память из-под результата напрямую. Она будет освобождена, когда соответствующий
PGconn идентификатор будет передан функции
PQfinish. Не следует ожидать, что
содержимое результирующей строки сохранится после выполнения операций над
PGconn структурой.
PQsocket #Данная функция возвращает номер файлового дескриптора для сокета соединения с сервером. Значение корректного дескриптора должно быть больше или равно 0; значение -1 указывает на то, что в настоящий момент соединение с сервером не установлено. (Данное значение не меняется в ходе штатной работы, но может измениться при установке или сбросе соединения.)
int PQsocket(const PGconn *conn);
PQbackendPID #Возвращает идентификатор процесса (PID) серверного процесса, обслуживающего данное соединение.
int PQbackendPID(const PGconn *conn);
Идентификатор серверного процесса PID полезен для целей отладки
и для сравнения с сообщениями NOTIFY
сообщения (которые включают PID из числа
уведомляющий фоновый процесс). Обратите внимание, что данный процесс
PID принадлежит процессу, выполняющемуся на
хосте сервера баз данных, а не на локальном хосте!
PQconnectionNeedsPassword #Возвращает истину (1), если используемый метод аутентификации соединения требовал пароль, однако он не был предоставлен. В противном случае возвращает ложь (0).
int PQconnectionNeedsPassword(const PGconn *conn);
Данную функцию можно использовать после неудачной попытки соединения, чтобы определить, следует ли запрашивать у пользователя пароль.
PQconnectionUsedPassword #Возвращает истину (1), если используемый метод аутентификации соединения использовало пароль. В противном случае возвращает ложь (0).
int PQconnectionUsedPassword(const PGconn *conn);
Данную функцию можно вызвать как после неудачной, так и после успешной попытки соединения, чтобы определить, затребовал ли сервер пароль.
PQconnectionUsedGSSAPI #Возвращает истину (1), если используемый метод аутентификации соединения использовало GSSAPI. В противном случае возвращает ложь (0).
int PQconnectionUsedGSSAPI(const PGconn *conn);
Для определения того, было ли соединение аутентифицировано с помощью GSSAPI, может применяться данная функция.
Информацию, связанную с протоколом SSL, возвращают следующие функции. Как правило, после установления соединения эти сведения не изменяются.
PQsslInUse #Если в соединении используется SSL, функция возвращает true (1), в противном случае — false (0).
int PQsslInUse(const PGconn *conn);
функция PQsslAttribute #Связанную с протоколом SSL информацию о соединении возвращает данная функция.
const char *PQsslAttribute(const PGconn *conn, const char *attribute_name);
В зависимости от типа соединения и используемой библиотеки SSL список доступных атрибутов может варьироваться. Если указанное имя атрибута не определено для используемой библиотеки или в соединении не используется SSL, функция возвращает значение NULL.
Обычно доступны следующие атрибуты:
library
Название используемой реализации SSL (в настоящее время — только
"OpenSSL" реализован)
протокол
Используемая версия SSL/TLS. Типичными значениями
являются "TLSv1", "TLSv1.1"
и "TLSv1.2", однако реализация может
возвращать иные строки, если используется другой протокол.
key_bitsКоличество бит в ключе, используемом алгоритмом шифрования.
шифр
Краткое наименование используемого набора шифров, например,
"DHE-RSA-DES-CBC3-SHA". Данные названия специфичны
для каждой конкретной реализации SSL.
сжатиеВозвращает значение «on», если применяется SSL-сжатие, иначе возвращается «off».
alpn
Протокол прикладного уровня, выбранный расширением TLS Application-Layer
Protocol Negotiation (ALPN). Единственным протоколом,
поддерживаемым библиотекой libpq, является postgresql, поэтому данное значение
полезно главным образом для проверки того, поддерживал ли сервер расширение ALPN или
нет. Пустая строка, если расширение ALPN не использовалось.
В качестве особого случая library атрибут может быть
запрошен без установления соединения путём передачи значения NULL в качестве
параметров объект conn аргумента. Результатом будет имя библиотеки SSL
по умолчанию или значение NULL, если библиотека libpq была
скомпилирована без какой-либо поддержки SSL. (До
равным Digital Q.DataBase версии 15 передача значения NULL в качестве
параметров объект conn аргумент всегда приводил к значению NULL.
Клиентским программам, которым необходимо различать новую и старую
реализации данного случая, следует проверить
LIBPQ_HAS_SSL_LIBRARY_DETECTION макрос функциональности.)
PQsslAttributeNames #
Возвращает массив имен атрибутов SSL, которые могут быть использованы в
в PQsslAttribute().
Массив завершается указателем со значением NULL.
const char * const * PQsslAttributeNames(const PGconn *conn);
Если объект conn имеет значение NULL, возвращаются атрибуты, доступные для
SSL-библиотеки по умолчанию, или пустой список,
когда libpq если библиотека была скомпилирована без поддержки
SSL. Если же параметр объект conn не имеет значения NULL, возвращаются атрибуты,
доступные для SSL-библиотеки, используемой в объекте conn,
или пустой список, если соединение не зашифровано.
структура PQsslStruct #Возвращает указатель на специфичный для реализации SSL объект, описывающий соединение. Функция возвращает значение NULL, если соединение не зашифровано или если запрошенный тип объекта не поддерживается в используемой в рамках соединения реализации SSL.
void *PQsslStruct(const PGconn *conn, const char *struct_name);
Набор доступных структур зависит от используемой реализации SSL.
Для OpenSSLдоступна одна структура,
под именем OpenSSL,
и функция возвращает указатель на
OpenSSL's SSL структуру.
Для вызова данной функции может использоваться код следующего вида:
#include#include ... SSL *ssl; dbconn = PQconnectdb(...); ... ssl = PQsslStruct(dbconn, "OpenSSL"); if (ssl) { /* использование функций OpenSSL для доступа к ssl */ }
Данная структура может применяться для проверки уровней шифрования, проверки сертификатов сервера и выполнения иных операций. Для получения подробных сведений о данной структуре обратитесь к OpenSSL документации.
PQgetssl #Возвращает структуру SSL, используемую в соединении, или значение NULL в случае, если протокол SSL не используется.
void *PQgetssl(const PGconn *conn);
Данная функция эквивалентна вызову структура PQsslStruct(объект conn, "OpenSSL"). Ее не следует
использовать в новых приложениях, так как возвращаемая структура является
специфичной для OpenSSL OpenSSL и не будет
доступна в случае использования иной SSL реализации.
Чтобы проверить, используется ли в соединении протокол SSL, следует вызвать функцию
PQsslInUse вместо нее, а для получения более подробных сведений о
соединении — функцию функция PQsslAttribute.