PostgreSQL 控制函數(shù)

2021-09-02 11:45 更新

這些函數(shù)控制libpq行為各種各樣的細(xì)節(jié)。

PQclientEncoding

返回客戶端編碼。

int PQclientEncoding(const PGconn *conn);

請注意,它返回的是編碼 ID,而不是一個符號串字符串,如EUC_JP。如果不成功,它會返回 -1。要把一個編碼 ID 轉(zhuǎn)換為為一個編碼名稱,可以用:

char *pg_encoding_to_char(int encoding_id);

PQsetClientEncoding

設(shè)置客戶端編碼。

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

conn是一個到服務(wù)器的連接,而encoding是你想使用的編碼。 如果函數(shù)成功地設(shè)置編碼,則返回 0,否則返回 -1。這個連接的當(dāng)前編碼可以使用PQclientEncoding確定。

PQsetErrorVerbosity

決定PQerrorMessagePQresultErrorMessage返回的消息的細(xì)節(jié)程度。

typedef enum { PQERRORS_TERSE, PQERRORS_DEFAULT, PQERRORS_VERBOSE, PQERRORS_SQLSTATE } PGVerbosity; PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity);

PQsetErrorVerbosity設(shè)置細(xì)節(jié)模式,并返回該連接的前一個設(shè)置。 在TERSE模式下,返回的消息只包括嚴(yán)重性、主要文本以及位置;這些東西通常放在一個單一行中。 DEFAULT模式生成的消息包括上面的信息加上任何細(xì)節(jié)、提示或者上下文域(這些可能跨越多行)。 VERBOSE模式包括所有可以可用的域。修改細(xì)節(jié)模式不會影響來自已有PGresult對象中的可用消息。 只有隨后創(chuàng)建的PGresult對象才受到影響。 SQLSTATE模式僅包括錯誤嚴(yán)重性和SQLSTATE錯誤代碼,如果其中之一是可用的(如果沒有,輸出類似于 TERSE模式)。

更改詳細(xì)程度設(shè)置不會影響已存在的PGresult對象的可用的消息,只會影響隨后創(chuàng)建的對象。 (如果想要用不同的詳細(xì)程度打印之前的錯誤,請見PQresultVerboseErrorMessage

PQsetErrorContextVisibility

決定如何處理PQerrorMessagePQresultErrorMessage返回的消息中的 CONTEXT域。

typedef enum
{
    PQSHOW_CONTEXT_NEVER,
    PQSHOW_CONTEXT_ERRORS,
    PQSHOW_CONTEXT_ALWAYS
} PGContextVisibility;

PGContextVisibility PQsetErrorContextVisibility(PGconn *conn, PGContextVisibility show_context);

PQsetErrorContextVisibility設(shè)置上下文顯示模式,返回該連接上之前的設(shè)置。 這個模式控制消息中是否包括CONTEXT域。 NEVER模式不會包括 CONTEXT,而ALWAYS則盡可能地包括這個域。 在ERRORS模式(默認(rèn))中,只在錯誤消息中包括CONTEXT域,而在通知和警告消息中不會包括。 (但是,如果詳細(xì)程度設(shè)置為 TERSESQLSTATE,則無論上下文顯示模式如何,都會省略 CONTEXT字段。)

更改這個模式不會影響從已經(jīng)存在的PGresult對象項中得到的消息,只會影響后續(xù)創(chuàng)建的PGresult對象 (如果想要用不同的詳細(xì)程度打印之前的錯誤,請見PQresultVerboseErrorMessage)。

PQtrace

啟用對客戶端/服務(wù)器通訊的跟蹤,把跟蹤信息輸出到一個調(diào)試文件流中。

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

注意

在 Windows上,如果libpq庫和應(yīng)用使用了不同的標(biāo)志編譯,那么這個函數(shù)調(diào)用會導(dǎo)致應(yīng)用崩潰,因為FILE指針的內(nèi)部表達(dá)是不一樣的。特別是多線程/單線程、發(fā)布/調(diào)試 以及靜態(tài)/動態(tài)標(biāo)志應(yīng)該是庫和所有使用庫的應(yīng)用都一致。

PQuntrace

禁用PQtrace打開的跟蹤。

void PQuntrace(PGconn *conn);


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號