34.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#设置
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#确定
PQerrorMessage和PQresultErrorMessage所返回消息中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字段只包含在错误消息中,不包含在通知和警告中。(不过,如果详细程度设置为 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,则打印每条消息时会隐去某些字段,例如对象 OID,以便在测试框架中使用输出。必须在调用PQtrace之后调用此函数。PQuntrace#禁用由
PQtrace启动的跟踪。void PQuntrace(PGconn *conn);
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.