31.11. Функции управления#
31.11. Функции управления #
Эти функции управляют различными деталями поведения libpq.
PQclientEncoding
#Возвращает кодировку клиента.
int PQclientEncoding(const PGconn *
conn
);Обратите внимание, что он возвращает идентификатор кодировки, а не символьную строку, такую как
EUC_JP
. Если не удалось, он возвращает -1. Чтобы преобразовать идентификатор кодировки в имя кодировки, вы можете использовать:char *pg_encoding_to_char(int
encoding_id
);PQsetClientEncoding
#Устанавливает кодировку клиента.
int PQsetClientEncoding(PGconn *
conn
, const char *encoding
);conn
- это соединение с сервером, аencoding
- это кодировка, которую нужно использовать. Если функция успешно устанавливает кодировку, она возвращает 0, в противном случае -1. Текущая кодировка для этого соединения может быть определена с помощьюPQclientEncoding
.PQsetErrorVerbosity
#Определяет детальность сообщений, возвращаемых функциями
PQerrorMessage
иPQresultErrorMessage
.typedef enum { PQERRORS_TERSE, PQERRORS_DEFAULT, PQERRORS_VERBOSE, PQERRORS_SQLSTATE } PGVerbosity; PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity);
PQsetErrorVerbosity
устанавливает режим детальности сообщений об ошибках и возвращает предыдущее значение этого режима. В режиме TERSE возвращаемые сообщения содержат только уровень серьезности, основной текст и позицию; обычно это помещается на одной строке. Режим DEFAULT включает в сообщения вышеуказанные поля, а также любые детали, подсказки или контекстные поля (они могут занимать несколько строк). Режим VERBOSE включает все доступные поля. Режим SQLSTATE включает только уровень серьезности ошибки и код ошибкиSQLSTATE
, если он доступен (если нет, вывод будет аналогичен режиму TERSE).Изменение настройки подробности не влияет на сообщения, доступные из уже существующих объектов
PGresult
, только на последующие созданные. (Но см.PQresultVerboseErrorMessage
, если нужно вывести предыдущую ошибку с другим уровнем детальности).PQsetErrorContextVisibility
#Определяет обработку полей
CONTEXT
в сообщениях, возвращаемых функциямиPQerrorMessage
иPQresultErrorMessage
.typedef enum { PQSHOW_CONTEXT_NEVER, PQSHOW_CONTEXT_ERRORS, PQSHOW_CONTEXT_ALWAYS } PGContextVisibility; PGContextVisibility PQsetErrorContextVisibility(PGconn *conn, PGContextVisibility show_context);
PQsetErrorContextVisibility
устанавливает режим отображения контекста и возвращает предыдущую настройку соединения. Этот режим контролирует, включается ли полеCONTEXT
в сообщения. Режим NEVER никогда не включаетCONTEXT
, в то время как режим ALWAYS всегда включает его, если доступно. В режиме ERRORS (по умолчанию) поляCONTEXT
включаются только в сообщения об ошибках, а не в уведомлениях и предупреждениях. (Однако, если установлены режимы TERSE или SQLSTATE для подробности, поляCONTEXT
будут не указаны независимо от режима отображения контекста).Изменение этого режима не влияет на сообщения, доступные из уже существующих объектов
PGresult
, только на последующие созданные. (Но см.PQresultVerboseErrorMessage
, если нужно вывести предыдущую ошибку с другим режимом отображения).PQtrace
#Включает трассировку обмена данными между клиентом и сервером в отладочный файловый поток.
void PQtrace(PGconn *conn, FILE *stream);
Каждая строка состоит из: необязательного временного штампа, индикатора направления (
F
для сообщений от клиента к серверу илиB
для сообщений от сервера к клиенту), длины сообщения, типа сообщения и содержимого сообщения. Поля, не являющиеся содержимым сообщения (временной штамп, направление, длина и тип сообщения), разделяются табуляцией. Содержимое сообщения разделяется пробелом. Протокольные строки заключены в двойные кавычки, а строки, используемые в качестве данных, заключены в апострофы. Непечатаемые символы печатаются в виде шестнадцатеричных эскейп-последовательностей. Дополнительные подробности о типах сообщений можно найти в Раздел 52.7.Примечание
На Windows, если библиотека libpq и приложение скомпилированы с разными флагами, вызов этой функции приведет к сбою приложения, поскольку внутреннее представление указателей
FILE
отличается. Конкретно, многопоточный/однопоточный, режим отладки/релиза и статический/динамический флаги должны быть одинаковыми для библиотеки и всех приложений, использующих эту библиотеку.PQsetTraceFlags
#Управляет поведением трассировки взаимодействия клиента и сервера.
void PQsetTraceFlags(PGconn *conn, int flags);
flags
содержит биты флагов, описывающие режим работы трассировки. Еслиflags
содержитPQTRACE_SUPPRESS_TIMESTAMPS
, то временная метка не включается при печати каждого сообщения. Еслиflags
содержитPQTRACE_REGRESS_MODE
, то некоторые поля, такие как идентификаторы объектов, удаляются при печати каждого сообщения, чтобы сделать вывод более удобным для использования в тестовых фреймворках. Эта функция должна быть вызвана после вызоваPQtrace
.PQuntrace
#Отключает трассировку, запущенную с помощью
PQtrace
.void PQuntrace(PGconn *conn);