这些函数控制 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 表示从服务器到客户端的消息)、消息长度、消息类型和消息内容。非消息内容字段(时间戳、方向、长度和消息类型)用制表符分隔。消息内容用空格分隔。协议字符串用双引号括起来,用作数据值的字符串用单引号括起来。不可打印的字符将以十六进制转义序列打印。更详细的消息类型信息可以在 第 54.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);