| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| 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 (啟動後無法更改); client_encoding,is_superuser,session_authorization, 和 DateStyle。
協議版本 3.0 之前的服務器不會報告參數設置,但是 libpq 裡包含一些邏輯用于獲取 server_version,和 client_encoding 的數值。 我們鼓勵應用裡面使用 PQparameterStatus,而不是使用特殊的代碼來檢測這些值。 (不過要注意,在 3.0 之前的連接協議裡,啟動後通過 SET 改變了 client_encoding 將不會被 PQparameterStatus 反映出來。)
查詢所使用的前/後端協議。
int PQprotocolVersion(const PGconn *conn);
應用可能希望使用這個函數來判斷某種特性是否被支持。 目前,可能的數值是 2(2.0 版本的協議),3(3.0 版本的協議),或者零(連接錯誤)。 在連接啟動完成之後,這個數值將不會改變,但是在連接重置的過程中,理論上是可能改變的。 3.0 協議通常將用于與 PostgreSQL 7.4 或者更新版本的服務器通訊; 7.4 以前的版本只支持 2.0 版本的協議。(1.0 版本的協議已經過時了,不再被 libpq 支持。)
char *PQerrorMessage(const PGconn* conn);
幾乎所有libpq函數在失敗時都會為 PQerrorMessage 設置一個信息。 注意libpq的傳統是,一個非空的PQerrorMessage 將在結尾包含一個新行。
獲取與服務器連接的套接字的文件描述符編號。 一個有效的描述符應該是大于或等于 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。