这些函数控制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模式包括所有可以可用的域。修改细节模式不会影响来自已有PGresult
对象中的可用消息。
只有随后创建的PGresult
对象才受到影响。
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
对象项中得到的消息,只会影响后续创建的PGresult
对象
(如果想要用不同的详细程度打印之前的错误,请见PQresultVerboseErrorMessage
)。
PQtrace
启用对客户端/服务器通讯的跟踪,把跟踪信息输出到一个调试文件流中。
void PQtrace(PGconn *conn, FILE *stream);
每行包括:一个可选的时间戳,一个方向指示器(F
表示从客户端到服务器的消息或B
表示从服务器到客户端的消息),消息长度、消息类型、和消息内容。
非消息内容字段(时间戳、方向、长度和消息类型)由一个制表符分隔。
消息内容用空格分隔。
协议字符串用双引号括起来,而用作数据值的字符串用单引号括起来。
不可打印的字符被打印为十六进制转义。
更多消息-类型-特定的详情可以在第 55.7 节中发现。
在 Windows上,如果libpq库和应用使用了不同的标志编译,那么这个函数调用会导致应用崩溃,因为FILE
指针的内部表达是不一样的。特别是多线程/单线程、发布/调试 以及静态/动态标志应该是库和所有使用库的应用都一致。
PQsetTraceFlags
控制客户端/服务器通信的跟踪行为。
void PQsetTraceFlags(PGconn *conn, int flags);
flags
包含描述跟踪的操作模式的标志位。
如果flags
包含PQTRACE_SUPPRESS_TIMESTAMPS
,则在打印每条消息时不包括时间戳。
如果flags
包含PQTRACE_REGRESS_MODE
,那么在打印每个消息时将修改一些字段,例如对象OIDs,以使输出在测试框架中更方便地使用。
这个函数必须在调用PQtrace
之后调用。
PQuntrace
禁用PQtrace
打开的跟踪。
void PQuntrace(PGconn *conn);