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для сообщений от сервера к клиенту), длины сообщения, типа сообщения и содержимого сообщения. Поля, не являющиеся содержимым сообщения (временной штамп, направление, длина и тип сообщения), разделяются табуляцией. Содержимое сообщения разделяется пробелом. Протокольные строки заключены в двойные кавычки, а строки, используемые в качестве данных, заключены в апострофы. Непечатаемые символы печатаются в виде шестнадцатеричных эскейп-последовательностей. Дополнительные подробности о типах сообщений можно найти в Раздел 53.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);