# 34.11.控制功能

这些函数控制libpq行为的各种细节。

客户编码

返回客户端编码。

int PQclientEncoding(const PGconn *conn);

请注意,它返回的是编码ID,而不是符号字符串,例如Eu_JP.如果失败,则返回-1.要将编码ID转换为编码名称,可以使用:

char *pg_encoding_to_char(int encoding_id);

PQsetClientEncoding

设置客户端编码。

int PQsetClientEncoding(PGconn *conn, const char *encoding);

*康涅狄格州是与服务器的连接,以及编码*是您要使用的编码。如果函数成功设置编码,则返回0,否则返回-1.此连接的当前编码可以通过使用客户编码.

PQsetErrorVerbosity

确定由返回的消息的详细程度PQerrorMessagePQResultrOrMessage.

typedef enum
{
    PQERRORS_TERSE,
    PQERRORS_DEFAULT,
    PQERRORS_VERBOSE,
    PQERRORS_SQLSTATE
} PGVerbosity;

PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity);

PQsetErrorVerbosity设置详细模式,返回连接之前的设置。在里面简短生硬的模式下,返回的消息仅包括严重性、主要文本和位置;这通常适用于一条线路。这个违约mode 生成的消息包括上述内容以及任何详细信息、提示或上下文字段(这些字段可能跨越多行)。这详细模式包括所有可用字段。这SQLSTATE模式仅包括错误严重性和SQLSTATE错误代码,如果一个可用(如果没有,输出就像简洁模式)。

更改详细程度设置不会影响现有消息中的可用消息PG结果对象,只有随后创建的对象。(但见PQresultVerboseErrorMessage如果您想以不同的详细程度打印先前的错误。)

PQsetErrorContextVisibility

确定处理语境返回的消息中的字段PQerrorMessagePQresultErrorMessage.

typedef enum
{
    PQSHOW_CONTEXT_NEVER,
    PQSHOW_CONTEXT_ERRORS,
    PQSHOW_CONTEXT_ALWAYS
} PGContextVisibility;

PGContextVisibility PQsetErrorContextVisibility(PGconn *conn, PGContextVisibility show_context);

PQsetErrorContextVisibility设置上下文显示模式,返回连接的先前设置。此模式控制是否语境字段包含在消息中。这绝不模式从不包括语境, 尽管总是如果可用,总是包括它。在错误模式(默认),语境字段仅包含在错误消息中,而不包含在通知和警告中。(但是,如果详细程度设置为简洁或者SQLSTATE,语境无论上下文显示模式如何,都会省略字段。)

更改此模式不会影响已存在的可用消息PG结果对象,只有随后创建的对象。(但见PQresultVerboseErrorMessage如果您想使用不同的显示模式打印先前的错误。)

PQtrace

启用对调试文件流的客户端/服务器通信的跟踪。

void PQtrace(PGconn *conn, FILE *stream);

每行包括:一个可选的时间戳,一个方向指示器(F用于从客户端到服务器的消息或用于从服务器到客户端的消息)、消息长度、消息类型和消息内容。非消息内容字段(时间戳、方向、长度和消息类型)由选项卡分隔。消息内容以空格分隔。协议字符串用双引号括起来,而用作数据值的字符串用单引号括起来。不可打印的字符被打印为十六进制转义符。更多特定于消息类型的详细信息可以在第 53.7 节.

# 笔记

在 Windows 上,如果 libpq 库和应用程序使用不同的标志编译,此函数调用将使应用程序崩溃,因为文件指针不同。具体来说,对于库和使用该库的所有应用程序,多线程/单线程、发布/调试和静态/动态标志应该相同。

PQsetTraceFlags

控制客户端/服务器通信的跟踪行为。

void PQsetTraceFlags(PGconn *conn, int flags);

旗帜包含描述跟踪操作模式的标志位。如果旗帜包含PQTRACE_SUPPRESS_TIMESTAMPS,则打印每条消息时不包括时间戳。如果旗帜包含PQTRACE_REGRESS_MODE,然后在打印每条消息时对某些字段进行编辑,例如对象 OID,以使输出更方便在测试框架中使用。该函数必须在调用后调用PQtrace.

PQuntrace

禁用跟踪开始于PQtrace.

void PQuntrace(PGconn *conn);