支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

32.11. 控制函数 #

这些函数控制 libpq 行为的杂项细节。

PQclientEncoding #

返回客户端编码。

int PQclientEncoding(const PGconn *conn);

请注意,它返回的是编码 ID,而不是诸如 EUC_JP 之类的符号字符串。 如果不成功,则返回 -1。 要将编码 ID 转换为编码名称,可以使用

char *pg_encoding_to_char(int encoding_id);
PQsetClientEncoding #

设置客户端编码。

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

conn 是到服务器的连接,encoding 是您要使用的编码。 如果函数成功设置编码,则返回 0,否则返回 -1。 可以使用 PQclientEncoding 来确定此连接的当前编码。

PQsetErrorVerbosity #

确定 PQerrorMessagePQresultErrorMessage 返回的消息的详细程度。

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 #

确定 PQerrorMessagePQresultErrorMessage 返回的消息中 CONTEXT 字段的处理方式。

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 字段,而不是在通知和警告中。(但是,如果详细程度设置为 TERSESQLSTATE,则无论上下文显示模式如何,都将省略 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,则在打印每条消息时会编辑某些字段,例如对象 OID,以使输出更方便在测试框架中使用。 此函数必须在调用 PQtrace 后调用。

PQuntrace #

禁用由 PQtrace 启动的跟踪。

void PQuntrace(PGconn *conn);

提交更正

如果您发现文档中有任何不正确、与您特定功能的体验不符或需要进一步澄清的地方,请使用此表单报告文档问题。