32.11. Функции управления#

32.11. Функции управления

32.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);