支援的版本:目前 (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 鍵分隔。訊息內容以空格分隔。協定字串包含在雙引號中,而用作資料值的字串包含在單引號中。不可列印的字元會列印為十六進位逸出字元。更多特定於訊息類型的詳細資訊,請參閱第 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);

提交更正

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