跳至主要內容

KlustronDB大约 2 分钟

34.10. 控制函数

这些函数控制libpq行为各种各样的细节。

PQclientEncoding : 返回客户端编码。

```synopsis
int PQclientEncoding(const PGconn *conn);
```

请注意,它返回的是编码 ID,而不是一个符号串字符串,如`EUC_JP`。如果不成功,它会返回 -1。要把一个编码 ID 转换为为一个编码名称,可以用:

```synopsis
char *pg_encoding_to_char(int encoding_id);
```

PQsetClientEncoding : 设置客户端编码。

```synopsis
int PQsetClientEncoding(PGconn *conn, const char *encoding);
```

**`conn`**是一个到服务器的连接,而**`encoding`**是你想使用的编码。如果函数成功地设置编码,则返回 0,否则返回 -1。这个连接的当前编码可以使用`PQclientEncoding`确定。

PQsetErrorVerbosity : 决定PQerrorMessagePQresultErrorMessage返回的消息的细节程度。

```synopsis
typedef enum
{
    PQERRORS_TERSE,
    PQERRORS_DEFAULT,
    PQERRORS_VERBOSE
} PGVerbosity;

PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity);
```

`PQsetErrorVerbosity`设置细节模式,并返回该连接的前一个设置。在**TERSE**模式下,返回的消息只包括严重性、主要文本以及位置;这些东西通常放在一个单一行中。缺省模式生成的消息包括上面的信息加上任何细节、提示或者上下文域(这些可能跨越多行)。**VERBOSE**模式包括所有可以可用的域。修改细节模式不会影响来自已有`PGresult`对象中的可用消息。只有随后创建的`PGresult`对象才受到影响(如果想要用不同的详细程度打印之前的错误,请见`PQresultVerboseErrorMessage`)。

PQsetErrorContextVisibility : 决定如何处理PQerrorMessagePQresultErrorMessage返回的消息中的CONTEXT域。

```synopsis
typedef enum
{
    PQSHOW_CONTEXT_NEVER,
    PQSHOW_CONTEXT_ERRORS,
    PQSHOW_CONTEXT_ALWAYS
} PGContextVisibility;

PGContextVisibility PQsetErrorContextVisibility(PGconn *conn, PGContextVisibility show_context);
```

`PQsetErrorContextVisibility`设置上下文显示模式,返回该连接上之前的设置。这个模式控制消息中是否包括`CONTEXT`域(除非 verbosity 设置是**TERSE**,那种情况下`CONTEXT`不会被显示)。**NEVER**模式不会包括`CONTEXT`,而**ALWAYS**则尽可能地包括这个域。在**ERRORS**模式(默认)中,只在错误消息中包括`CONTEXT`域,而在通知和警告消息中不会包括。更改这个模式不会影响从已经存在的`PGresult`对象项中得到的消息,只会影响后续创建的`PGresult`对象(如果想要用不同的详细程度打印之前的错误,请见`PQresultVerboseErrorMessage`)。

PQtrace : 启用对客户端/服务器通讯的跟踪,把跟踪信息输出到一个调试文件流中。

```synopsis
void PQtrace(PGconn *conn, FILE *stream);
```

### 注意

在 Windows上,如果libpq库和应用使用了不同的标志编译,那么这个函数调用会导致应用崩溃,因为`FILE`指针的内部表达是不一样的。特别是多线程/单线程、发布/调试 以及静态/动态标志应该是库和所有使用库的应用都一致。

PQuntrace : 禁用PQtrace打开的跟踪。

```synopsis
void PQuntrace(PGconn *conn);
```