| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 27. libpq - C 庫 | Fast Forward | Next |
這些函數可以用於詢問現存資料庫連接對象的狀態。
Tip: libpq應用程序員應該仔細維護PGconn結構。 使用下面的訪問函數來獲取PGconn的內容。 避免直接引用PGconn結構裡的字串, 因為這些字串在今後可能被改變。 (從 PostgreSQL 版本 6.4 開始, 類型 struct PGconn 後面的定義甚至都沒有放在 libpq-fe.h裡。 如果您有一些直接訪問PGconn資料域的舊代碼,您可以透過包含 libpq-int.h 來訪問它們,但我們鼓勵您趕快修改那些代碼。)
下面的函數返回連接建立時的參數。這些參數在 PGconn 對象的生命期期間是固定的。
返回連接的資料庫名。
char *PQdb(const PGconn *conn);
返回連接的用戶名。
char *PQuser(const PGconn *conn);
返回連接的指令。
char *PQpass(const PGconn *conn);
返回連接的伺服器主機名。
char *PQhost(const PGconn *conn);
返回連接的連接埠號。
char *PQport(const PGconn *conn);
返回連接的調試控制台TTY。 (這個已經過時了,因為伺服器不再注意 TTY 設置,這個函數存在是為了向下兼容。)
char *PQtty(const PGconn *conn);
PQoptions 返回連接請求中傳遞的命令行選項。
char *PQoptions(const PGconn *conn);
下面的函數返回那些在對 PGconn 對像進行操作的過程中可能變化的狀態資料。
返回連接的狀態。
ConnStatusType PQstatus(const PGconn *conn);
這個狀態可以是一系列值之一。 不過,我們在一個異步連接過程外面只能看到其中的兩個: CONNECTION_OK 或 CONNECTION_BAD。一個與資料庫的成功的連接返回狀態 CONNECTION_OK。 一次失敗的企圖用狀態 CONNECTION_BAD 標識。 通常,一個 OK 狀態將保持到 PQfinish,但是一個通訊失敗可能會導致狀態過早地改變為 CONNECTION_BAD 。這時應用可以試著調用 PQreset 來恢復。
參閱PQconnectStart和PQconnectPoll條目看看可能出現的其他的狀態碼。
返回目前伺服器的交易內狀態。
PGTransactionStatusType PQtransactionStatus(const PGconn *conn);
狀態可以是 PQTRANS_IDLE (目前空閒), PQTRANS_ACTIVE (正在處理一個命令), PQTRANS_INTRANS (空閒,在一個合法的交易內), 或者 PQTRANS_INERROR (空閒,在一個失敗的交易內)。 如果連接有問題,則返回 PQTRANS_UNKNOWN。 只有在一個查詢發送給了伺服器並且還沒有完成的時候才返回 PQTRANS_ACTIVE。
| Caution |
如果使用一個支援 autocommit 參數,並且設置為關閉的 PostgreSQL 7.3 版本的伺服器, 那麼 PQtransactionStatus 將給出不正確的結果。伺服器端的 autocommit (自動提交)特性已經廢棄了, 在將來的版本的伺服器中不再存在。 |
查找伺服器的一個目前參數設置。
const char *PQparameterStatus(const PGconn *conn, const char *paramName);
有些參數在建立連接或者它們的值改變的時候會由伺服器自動報告。 PQparameterStatus 可以用於查詢這些設置。 如果它認識這些參數,那麼它返回目前值,否則返回 NULL。
目前版本報告的參數有 server_version, server_encoding, client_encoding, session_authorization, DateStyle, TimeZone 和 integer_datetimes。 (版本 8.0 之前沒有報告 server_encoding,TimeZone 和 integer_datetimes。) 請注意 server_version, server_encoding 和 integer_datetimes 不能在啟動後修改。
協議版本 3.0 之前的伺服器不會報告參數設置,但是 libpq 裡包含一些邏輯用於獲取 server_version 和 client_encoding 的數值。 我們鼓勵應用裡面使用 PQparameterStatus,而不是使用特殊的代碼來檢測這些值。 (不過要注意,在 3.0 之前的連接協議裡,啟動後透過 SET 改變了 client_encoding 將不會被 PQparameterStatus 反映出來。) 對於 server_version,又見 PQserverVersion,它返回數值形式, 更容易進行比較。
儘管返回的指針聲明為 const,它實際上指向一個和 PGconn 結構關聯的可變的儲存區。因此假設這個指針跨查詢保持有效是不明智的。
查詢所使用的前/後端協議。
int PQprotocolVersion(const PGconn *conn);
應用可能希望使用這個函數來判斷某種特性是否被支援。 目前,可能的數值是 2(2.0 版本的協議),3(3.0 版本的協議),或者零(連接錯誤)。 在連接啟動完成之後,這個數值將不會改變,但是在連接重置的過程中,理論上是可能改變的。 3.0 協議通常將用於與 PostgreSQL 7.4 或者更新版本的伺服器通訊; 7.4 以前的版本只支援 2.0 版本的協議。(1.0 版本的協議已經過時了,不再被 libpq 支援。)
Returns an integer representing the backend version.
int PQserverVersion(const PGconn *conn);
應用可以使用這個函數判斷它們連接的資料庫伺服器的版本。 數字是透過把主、次、以及發佈版本好轉換成兩位十進制數並且把它們連接在一起組成的。 比如,版本 7.4.2將轉換為 70402,而 8.1 將轉換為 80100(不顯示前導的零)。 如果連接失敗,則返回零。
char *PQerrorMessage(const PGconn *conn);
幾乎所有libpq函數在失敗時都會為 PQerrorMessage 設置一個訊息。 注意libpq的傳統是,一個非空的PQerrorMessage 將在結尾包含一個新行。調用者不應該直接釋放結果。結果的釋放是在將 PGconn 句柄傳遞給 PQfinish 的時候自動進行的。 我們不能假設在不同的 PGconn 結構操作中,結果字串都是一樣的。
獲取與伺服器連接的套接字的文件描述符編號。 一個有效的描述符應該是大於或等於 0;結果為 -1 資料表示目前沒有與伺服器的連接打開。 (在正常的操作中,這個結果不會改變,但是可能在啟動或者重置的過程中變化。)
int PQsocket(const PGconn *conn);
int PQbackendPID(const PGconn *conn);
這個伺服器PID 在調試和對比NOTIFY訊息 (包含發出通知的伺服器進程的 PID )時很有用。 注意該PID 屬於執行資料庫伺服器的主機的進程,而不是本地主機!
返回連接使用的 SSL 結構,或者如果沒有使用 SSL 的話返回 NULL。
SSL *PQgetssl(const PGconn *conn);
這個結構可以用於核實加密級別,檢查伺服器認證等訊息。參考 OpenSSL 文件獲取關於這個結構的更多訊息。
為了獲取這個函數的正確原形,您必須定義 USE_SSL。 這樣做會自動包含來自OpenSSL的ssl.h。