2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 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

32.11. 控制函式 #

這些函式控制 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 #

確定 PQerrorMessagePQresultErrorMessage 返回的訊息的詳細程度。

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 #

確定 PQerrorMessagePQresultErrorMessage 返回的訊息中 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 欄位,而不包含在通知和警告中。(但是,如果詳細程度設定為 TERSESQLSTATE,則無論上下文顯示模式如何,都會省略 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);

提交更正

如果您在文件中發現任何不正確之處、與您對特定功能的實際體驗不符之處或需要進一步澄清之處,請使用 此表單 報告文件問題。