这些函数控制 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
对象中获得的消息,只会影响随后创建的 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
对象中获得的消息,只会影响随后创建的 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);
如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用 此表格 报告文档问题。