↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 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
历史版本。 PostgreSQL 13 已结束支持。 2025-11-13. 请参阅 当前版本手册.

33.10. 控制函数 #

这些函数控制 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);

注意

在 Windows 上,如果 libpq 库与应用程序使用不同的标志编译,调用此函数会导致应用程序崩溃,因为 FILE 指针的内部表示不同。具体而言,库与所有使用它的应用程序都应使用相同的多线程/单线程、发布/调试和静态/动态标志。

PQuntrace #

禁用由 PQtrace 启动的跟踪。

void PQuntrace(PGconn *conn);

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.