支援的版本:目前 (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 代表從伺服器到用戶端的訊息)、訊息長度、訊息類型和訊息內容。 非訊息內容欄位(時間戳記、方向、長度和訊息類型)以 Tab 分隔。 訊息內容以空格分隔。 協定字串用雙引號括起來,而用作資料值的字串用單引號括起來。 不可列印的字元會列印為十六進位逸出字元。 更多訊息類型特定的詳細資訊可以在 Section 53.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);

提交更正

如果您在文件中看到任何不正確、與您特定功能的經驗不符或需要進一步澄清的內容,請使用此表單報告文件問題。