Эти функции управляют различными аспектами поведения 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
} PGVerbosity;
PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity);
PQsetErrorVerbosity устанавливает уровень детализации и возвращает предыдущее значение для соединения. В «лаконичном» режиме (TERSE) возвращаемые сообщения содержат только уровень важности, основной текст и позицию; всё это обычно умещается в одной строке. В режиме по умолчанию выдаваемые сообщения дополнительно содержат поля подробного описания, подсказки или контекста (они могут занимать несколько строк). В «многословном» режиме (VERBOSE) передаются все доступные поля сообщения. Изменение уровня детализации не влияет на сообщения, уже сформированные в существующих объектах 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 может включаться в сообщения или нет (если только не выбран уровень детализации TERSE, при котором CONTEXT не выводится никогда). В режиме NEVER поле CONTEXT не выводится никогда, а в режиме ALWAYS выводится всегда (если оно имеется). В режиме ERRORS (по умолчанию) поле CONTEXT включается только в сообщения об ошибках, но не в уведомления или предупреждения. Изменение этого уровня не влияет на сообщения, уже сформированные в существующих объектах PGresult, а затрагивает только последующие сообщения. (Но можно воспользоваться PQresultVerboseErrorMessage, чтобы получить предыдущую ошибку с другим режимом вывода контекста.)
PQtrace
Включает трассировку клиент-серверного взаимодействия с выводом в поток отладочных сообщений.
void PQtrace(PGconn *conn, FILE *stream);
В Windows, если библиотека libpq и приложение скомпилированы с разными флагами, эта функция может вызвать крах приложения из-за различий внутреннего представления указателей FILE. В частности, флаги многопоточной/однопоточной, выпускаемой/отладочной или статической/динамической сборки должны быть одинаковыми для библиотеки и всех использующих её приложений.
PQuntrace
Выключает трассировку, запущенную функцией PQtrace.
void PQuntrace(PGconn *conn);