<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 31.1\. 數據庫連接控制函數 下面的函數處理與PostgreSQL服務器聯接的事情。 一個應用程序一次可以與多個服務器建立聯接。 (這么做的原因之一是訪問多于一個數據庫。) 每個連接都是用一個從函數 `PQconnectdb`、`PQconnectdbParams`或`PQsetdbLogin` 獲得的`PGconn`對象表示。 注意,這些函數總是返回一個非空的對象指針,除非存儲器少得連個 `PGconn`對象都分配不出來。在把查詢發送給連接對象之前, 可以調用`PQstatus`函數來檢查一下返回值看看連接是否成功。 | **Warning** | |:--- | | 在Unix上,用打開的libpq連接分支化一個過程會導致不可預知的結果, 因為父進程和子進程共享同一個套接字和操作系統資源。因為這個原因, 不建議這樣的使用,盡管從子進程中執行`exec` 加載一個新的可執行文件是安全的。 | > **Note:** 在Windows上,如果一個數據庫連接重復的啟動和關閉,有一個方式提高性能。 內部的,libpq為連接啟動和關閉分別調用`WSAStartup()`和`WSACleanup()`。 `WSAStartup()`增加一個內部Windows庫引用計數,而`WSACleanup()` 減少一個。當引用計數是一時,調用`WSACleanup()`釋放所有資源和所有DLL是空載的。 這是一個昂貴的操作。為了避免它,一個應用可以手動調用`WSACleanup()`, 這樣在最后一個數據庫連接關閉時,資源將不會被釋放。 `PQconnectdbParams` 與數據庫服務器建立一個新的連接。 ``` PGconn *PQconnectdbParams(const char * const *keywords, const char * const *values, int expand_dbname); ``` 這個函數用從兩個`NULL`結束的數組中來的參數打開一個新的數據庫連接。 第一個,`keywords`,定義為一個字符串的數組,每個都成為一個關鍵字。 第二個,`values`,給每個關鍵字一個值。與下面的`PQsetdbLogin` 不同的是,我們可以不必更換函數簽名(名字)就可以擴展參數集, 所以我們建議應用程序中使用這個函數(或者它的類似的非阻塞變種 `PQconnectStartParams`和`PQconnectPoll`)。 目前公認的參數關鍵字在[Section 31.1.2](#calibre_link-498)中列出。 當`expand_dbname`是非零的時,允許將`dbname` 的關鍵字值看做一個連接字符串。可能的格式的更詳細信息在[Section 31.1.1](#calibre_link-458) 中顯示。 傳入的參數可以為空,表明使用所有缺省的參數,或者可以包含一個或更多個參數設置。 它們的長度應該匹配。處理將會在`keywords`數組的最后一個非 `NULL`元素停止。 如果沒有指定任何參數,則使用對應的環境變量(參閱[Section 31.14](#calibre_link-39))。 如果環境變量也沒有設置,則使用表示的內建缺省。 通常,關鍵字是從這些數組的開始以索引的順序處理的。這樣的影響是,當關鍵字重復時, 獲得最后處理的值。因此,通過小心的放置`dbname`關鍵字, 有可能決定哪個被`conninfo`字符串覆蓋,哪個不被覆蓋。 `PQconnectdb` 與數據庫服務器建立一個新的連接。 ``` PGconn *PQconnectdb(const char *conninfo); ``` 這個函數用從一個字符串`conninfo`來的參數與數據庫打開一個新的聯接。 傳入的參數可以為空,表明使用所有缺省的參數,或者可以包含一個或更多個用空白間隔的參數設置, 或者它可以包含一個URI。參閱[Section 31.1.1](#calibre_link-458)獲取細節。 `PQsetdbLogin` 與數據庫服務器建立一個新的連接。 ``` PGconn *PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions, const char *pgtty, const char *dbName, const char *login, const char *pwd); ``` 這個函數是`PQconnectdb`前身,它有固定個數的參數。它有相同的功能, 只是在調用中那些它缺少的參數總是用缺省值。如果要給任意的固定參數設置缺省值, 那么寫一個`NULL`或者一個空字串給它們。 如果`dbName`包含一個`=`符或者有一個有效的連接 URI前綴,它被看做一個`conninfo`字符串, 就和它已經被傳遞到`PQconnectdb`中完全一樣, 然后剩余的參數就像為`PQconnectdbParams`指定的那樣應用。 `PQsetdb` 與數據庫服務器建立一個新的連接。 ``` PGconn *PQsetdb(char *pghost, char *pgport, char *pgoptions, char *pgtty, char *dbName); ``` 這是一個調用`PQsetdbLogin`的宏,只是`login`和`pwd` 參數是空指針。提供這個函數是為了與非常老版本的程序兼容。 `PQconnectStartParams``PQconnectStart` `PQconnectPoll` 與數據庫服務器建立一次非阻塞的聯接。 ``` PGconn *PQconnectStartParams(const char * const *keywords, const char * const *values, int expand_dbname); PGconn *PQconnectStart(const char *conninfo); PostgresPollingStatusType PQconnectPoll(PGconn *conn); ``` 這三個函數用于打開一個與數據庫服務器之間的非阻塞的聯接: 你的應用的執行線程在執行它的時候不會因遠端的 I/O 而阻塞。 這個方法的要點是等待 I/O 結束可以發生在應用的主循環里, 而不是在`PQconnectdbParams`或`PQconnectdb`里, 這樣應用可以把這件事與其它操作并發起來一起執行。 對于`PQconnectStartParams`,數據庫聯接是用從`keywords` 和`values`數組中取得的參數進行的,并且是使用`expand_dbname` 控制的,就像上面`PQconnectdbParams`里描述的一樣。 對于`PQconnectStart`,數據庫聯接是用從`conninfo` 字符串里取得的參數進行的,這個字符串的格式與上面`PQconnectdb` 里描述的一樣。 `PQconnectStartParams`、`PQconnectStart` 和`PQconnectPoll`都不會阻塞(進程),不過有一些條件: * 必須正確提供`hostaddr`和`host`參數以確保不會發生正向或者反向的名字查找。 參閱[Section 31.1.2](#calibre_link-498)里的這些參數的文檔獲取細節。 * 如果你調用了`PQtrace`,確保你跟蹤進入的流對象不會阻塞。 * 你必須在調用`PQconnectPoll`之前確保 socket 處于正確的狀態, 像下面描述的那樣。 注意:`PQconnectStartParams`的使用類似于下面顯示的`PQconnectStart`。 要開始一次非阻塞連接請求,調用`conn = PQconnectStart("``_connection_info_string_`")。 如果`conn`是空,表明libpq無法分配一個新的`PGconn`結構。 否則,返回一個有效的`PGconn`指針(盡管還不一定代表一個與數據庫有效聯接)。 `PQconnectStart`一返回,調用`status = PQstatus(conn)`。 如果`status`等于`CONNECTION_BAD`,`PQconnectStart`失敗。 如果`PQconnectStart`成功了,下一個階段是輪詢libpq, 這樣它就可以繼續連接序列動作。使用`PQsocket(conn)` 獲取數據庫鏈接下層的套接字描述符。像這樣循環:如果`PQconnectPoll(conn)` 的最后一個返回是`PGRES_POLLING_READING`,那么就等到套接字準備好被讀取了的時候 (就像系統函數`select()`,`poll()`,或者類似的系統調用聲明的那樣)。 然后再次調用`PQconnectPoll(conn)`。反過來,如果`PQconnectPoll(conn)` 最后返回`PGRES_POLLING_WRITING`,那么就等到套接字準備好可以寫了, 然后再次調用`PQconnectPoll(conn)`。如果你還沒調用`PQconnectPoll`, 比如,剛剛調用完`PQconnectStart`,那么按照它剛返回`PGRES_POLLING_WRITING` 的原則行動。繼續這個循環直到`PQconnectPoll(conn)`返回`PGRES_POLLING_FAILED`, 表明連接過程失敗,或者`PGRES_POLLING_OK`,表明連接成功建立。 在連接的任意時刻,我們都可以通過調用`PQstatus`來檢查聯接的狀態。 如果這是`CONNECTION_BAD`,那么聯接過程失敗;如果是`CONNECTION_OK`, 那么聯接已經做好。這兩種狀態同樣也可以從上面的`PQconnectPoll`的返回值里檢測到。 其他狀態可能(也只能)在一次異步聯接過程中發生。這些標識連接過程的當前狀態, 因而可能對給用戶提供反饋有幫助。這些狀態可能包括: `CONNECTION_STARTED` 等待進行連接。 `CONNECTION_MADE` 連接成功;等待發送。 `CONNECTION_AWAITING_RESPONSE` 等待來自服務器的響應。 `CONNECTION_AUTH_OK` 已收到認證;等待后端啟動結束。 `CONNECTION_SSL_STARTUP` 協商 SSL 加密。 `CONNECTION_SETENV` 協商環境驅動的參數設置。 注意,盡管這些常量將保持下去(為了維持兼容性),應用決不應該依賴于這些常量以某種特定順序出現, 或者是根本不應依賴于這些常量,或者是不應該依賴于這些狀態總是某個文檔聲明的值。 一個應用可能像下面這樣: ``` switch(PQstatus(conn)) { case CONNECTION_STARTED: feedback = "Connecting..."; break; case CONNECTION_MADE: feedback = "Connected to server..."; break; . . . default: feedback = "Connecting..."; } ``` 在使用`PQconnectPoll`的時候,連接參數`connect_timeout` 將被忽略;判斷是否超時是應用的責任。否則,后面跟著一個`PQconnectPoll` 循環的`PQconnectStart`等效于`PQconnectdb`。 要注意如果`PQconnectStart`返回一個非空的指針,你必須在使用完它(指針) 之后調用`PQfinish`,以處理那些結構和所有相關的存儲塊。 甚至是在連接嘗試失敗或放棄時也要這樣處理。 `PQconndefaults` 返回缺省的聯接選項。 ``` PQconninfoOption *PQconndefaults(void); typedef struct { char *keyword; /* 選項的鍵字 */ char *envvar; /* 退守的環境變量名 */ char *compiled; /* 退守的編譯時缺省值*/ char *val; /* 選項的當前值,或者 NULL */ char *label; /* 連接對話里字段的標識 */ char *dispchar; /* 在連接對話里為此字段顯示的字符。 數值有: "" 原樣現實輸入的數值 "*" 口令字段 - 隱藏數值 "D" 調試選項 - 缺省的時候不顯示 */ int dispsize; /* 對話中字段的以字符計的大小 */ } PQconninfoOption; ``` 返回一個連接選項數組。可以用于獲取所有可能的`PQconnectdb` 選項和它們的當前缺省值。返回值指向一個`PQconninfoOption` 結構的數組,該數組以一個有 NULL `keyword`指針的條目結束。 如果無法分配內存,則返回空指針。注意當前缺省值(`val`域) 將依賴于環境變量和其他環境。調用者必須把連接選項當作只讀對待。 在處理完選項數組后,把數組交給`PQconninfoFree`釋放。 如果沒有這么做,每次調用`PQconndefaults`都會有一小部分內存泄漏。 `PQconninfo` 返回活的連接使用的連接選項。 ``` PQconninfoOption *PQconninfo(PGconn *conn); ``` 返回一個連接選項數組。可以用于獲取所有可能的`PQconnectdb` 選項和用于連接到服務器的值。返回值指向一個`PQconninfoOption` 結構的數組,該數組以一個有 NULL `keyword`指針的條目結束。 以上所有`PQconndefaults`的注意事項也應用到`PQconninfo` 的結果。 `PQconninfoParse` 從提供的連接字符串中返回解析的連接選項。 ``` PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg); ``` 解析連接字符串并作為數組返回結果選項;或者如果連接字符串有問題返回`NULL`。 這個函數可以用來在提供的連接字符串中提取`PQconnectdb`選項。 返回值指向一個`PQconninfoOption`結構的數組, 該數組以一個有 NULL `keyword`指針的條目結束。 所有合法選項將在結果數組中顯示,但是`PQconninfoOption` 的任何沒有在連接字符串中出現的選項將把`val`設置為`NULL`; 缺省值不插入。 如果`errmsg`是非`NULL`的,那么`*errmsg`在成功時設置為`NULL`, 否則是`malloc`的解釋問題的錯誤字符串。(`*errmsg`設置為`NULL` 并且函數返回`NULL`是可能的;這表示一個內存溢出條件。) 在處理完選項數組后,把數組交給`PQconninfoFree`釋放。 如果沒有這么做,每次調用`PQconndefaults`都會有一小部分內存泄漏。 相反的,如果錯誤發生了并且`errmsg`非`NULL`, 確保使用`PQfreemem`釋放錯誤字符串。 `PQfinish` 關閉與服務器的連接。同時釋放被`PGconn`對象使用的存儲器。 ``` void PQfinish(PGconn *conn); ``` 注意,即使與服務器的連接嘗試失敗(可由`PQstatus`判斷), 應用也要調用`PQfinish`釋放被`PGconn` 對象使用的存儲器。不應該在調用`PQfinish`后再使用`PGconn`指針。 `PQreset` 重置與服務器的通訊端口。 ``` void PQreset(PGconn *conn); ``` 此函數將關閉與服務器的連接并且試圖與同一個服務器重建新的連接, 使用所有前面使用過的參數。這在失去工作連接后進行故障恢復時很有用。 `PQresetStart` `PQresetPoll` 以非阻塞模式重置與服務器的通訊端口。 ``` int PQresetStart(PGconn *conn); PostgresPollingStatusType PQresetPoll(PGconn *conn); ``` 此函數將關閉與服務器的連接并且試圖與同一個服務器重建新的連接,使用所有前面使用過的參數。 這在失去工作連接后進行故障恢復時很有用。它們和上面的`PQreset` 的區別是它們工作在非阻塞模式。這些函數的使用有與上面`PQconnectStartParams`、 `PQconnectStart`和`PQconnectPoll`一樣的限制。 要發起一次連接重置,調用`PQresetStart`。如果它返回 0, 那么重置失敗。如果返回 1,用與使用`PQresetPoll` 建立連接的同樣的方法使用`PQresetPoll`重置連接。 `PQpingParams` `PQpingParams`報告服務器的狀態。它接受和`PQconnectdbParams` 一樣的連接參數,在下面描述。不需要應用正確的用戶名、密碼或數據庫名的值獲取服務器狀態; 不過,如果提供了不正確的值,服務器將記錄一次失敗的連接嘗試。 ``` PGPing PQpingParams(const char * const *keywords, const char * const *values, int expand_dbname); ``` 該函數返回下列的值之一: `PQPING_OK` 服務器正在運行并且似乎接受了連接。 `PQPING_REJECT` 服務器正在運行,但是在一個不允許連接的狀態(啟動、關閉或崩潰恢復)。 `PQPING_NO_RESPONSE` 聯系不上服務器。這可能表明服務器沒有運行,或者給出的連接參數有什么錯誤 (例如,錯誤的端口號),或者網絡連接有問題(例如,防火墻阻塞連接請求)。 `PQPING_NO_ATTEMPT` 沒有嘗試連接到服務器,因為提供的參數明顯的不正確或者有一些客戶端側的問題(例如,內存溢出)。 `PQping` `PQping`報告服務器的狀態。它接受和`PQconnectdb` 一樣的連接參數,在下面描述。不需要應用正確的用戶名、密碼或數據庫名的值獲取服務器狀態; 不過,如果提供了不正確的值,服務器將記錄一次失敗的連接嘗試。 ``` PGPing PQping(const char *conninfo); ``` 返回值和`PQpingParams`的相同。 ## 31.1.1\. 連接字符串 幾個libpq函數分析用戶指定的字符串以獲取連接參數。 這些字符串有兩個可接受的格式:純`keyword = value`字符串和 [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt) URIs。 ### 31.1.1.1\. 關鍵字/值連接字符串 在第一中格式中,每個參數以`keyword = value`的形式設置。 等號周圍的空白是可選的。要寫一個空值或者一個包含空白的值,你可以用一對單引號包圍它們, 例如,`keyword = 'a value'`。數值內部的單引號和反斜杠必須用一個反斜杠逃逸, 比如,`\'`或`\\`。 示例: ``` host=localhost port=5432 dbname=mydb connect_timeout=10 ``` 可識別的參數關鍵字在[Section 31.1.2](#calibre_link-498)中列出。 ### 31.1.1.2\. 連接URI 連接URI的通用格式是: ``` postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...] ``` URI模式標識符可以是`postgresql://`或 `postgres://`。URI的每個部分都是可選的。 下列示例舉例說明了有效的URI語法使用: ``` postgresql:// postgresql://localhost postgresql://localhost:5433 postgresql://localhost/mydb postgresql://user@localhost postgresql://user:secret@localhost postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp ``` URI的層次部分的組件也可以作為參數給出。例如: ``` postgresql:///mydb?host=localhost&port=5433 ``` 百分號可以用在URI的任何部分來包含特殊含義的符號。 忽略任何不對應于在[Section 31.1.2](#calibre_link-498)列出的關鍵字的連接參數, 并將關于它們的警告消息發送到`stderr`。 為了提高JDBC連接URI的兼容性,參數`ssl=true` 的實例被翻譯成`sslmode=require`。 主機部分是主機名或者IP地址。要指定一個IPv6主機地址,將它包含在方括號中: ``` postgresql://[2001:db8::1234]/database ``` 主機部分解釋為參數[host](#calibre_link-499)的描述。特別的, 如果主機部分為空或者以斜線開頭,那么選擇一個Unix域套接字連接,否則初始化一個TCP/IP連接。 不過要注意,斜線是URI分層部分的一個保留字符。所以,要指定一個非標準Unix域套接字路徑, 要么在URI中省略主機聲明并指定主機為一個參數,要么在URI的主機部分添加百分號: ``` postgresql:///dbname?host=/var/lib/postgresql postgresql://%2Fvar%2Flib%2Fpostgresql/dbname ``` ## 31.1.2\. 參數關鍵字 目前可識別的參數鍵字是: `host` 要聯接的主機名。如果主機名以斜杠開頭, 則它聲明使用 Unix 域套接字通訊而不是 TCP/IP 通訊;該值就是套接字文件所存儲的目錄。 如果沒有聲明`host`,那么缺省時是與位于`/tmp`目錄 (或者制作PostgreSQL的時候聲明的套接字目錄)里面的 Unix-域套接字連接。 在沒有 Unix 域套接字的機器上,缺省是與`localhost`連接。 `hostaddr` 與之連接的主機的 IP 地址。這個應該是標準的IPv4 地址格式,比如,`172.28.40.9`。 如果你的機器支持 IPv6,那么你也可以使用 IPv6 的地址。如果聲明了一個非空的字符串, 那么使用 TCP/IP 通訊機制。 使用`hostaddr`取代`host`可以讓應用避免一次主機名查找, 這一點對于那些有時間約束的應用來說可能是非常重要的。不過,Kerberos、GSSAPI 或SSPI認證方法和`verify-full` SSL證書驗證要求主機(host)名。 因此,應用下面的規則: * 如果聲明了不帶`hostaddr`的`host`那么就強制進行主機名查找。 * 如果聲明中沒有`host`,`hostaddr`的值給出服務器網絡地址; 如果認證方法要求主機名,那么連接嘗試將失敗。 * 如果同時聲明了`host`和`hostaddr`,那么`hostaddr` 的值作為服務器網絡地址。`host`的值將被忽略,除非認證方法需要它, 在這種情況下它將被用作主機名。 要注意如果`host`不是網絡地址`hostaddr`處的服務器名, 那么認證很有可能失敗。同樣,在`~/.pgpass`(參閱[Section 31.15](#calibre_link-457)) 中是使用`host`而不是`hostaddr`來標識連接。 如果主機名(host)和主機地址都沒有,那么libpq 將使用一個本地的 Unix 域套接字進行連接;或者是在沒有 Unix 域套接字的機器上, 它將嘗試與`localhost`連接。 `port` 主機服務器的端口號,或者在 Unix 域套接字聯接時的套接字擴展文件名。 `dbname` 數據庫名。缺省和用戶名相同。在某些情況下,為擴展的格式檢查值; 參閱[Section 31.1.1](#calibre_link-458)獲取更多信息。 `user` 要連接的PostgreSQL用戶名。 缺省是與運行該應用的用戶操作系統名同名的用戶。 `password` 如果服務器要求口令認證,所用的口令。 `connect_timeout` 連接的最大等待時間,以秒計(用十進制整數字串書寫)。零或者不聲明表示無窮。 我們不建議把連接超時的值設置得小于 2 秒。 `client_encoding` 為這個連接設置`client_encoding`配置參數。 除了對應的服務器選項接受的值,你可以使用`auto` 從客戶端中的當前環境中確定正確的編碼(Unix系統上是 `LC_CTYPE`環境變量)。 `options` 添加命令行選項以在運行時發送到服務器。例如,設置為`-c geqo=off` 設置`geqo`參數的會話的值為`off`。關于可用選項的詳細討論, 請查閱[Chapter 18](#calibre_link-500)。 `application_name` 為[application_name](#calibre_link-501)配置參數指定一個值。 `fallback_application_name` 為[application_name](#calibre_link-501)配置參數指定一個回退值。 如果沒有通過連接參數或`PGAPPNAME`環境變量給定 `application_name`值,那么將使用這個值。 在想要設置缺省應用名但是允許用戶重寫的通用實用程序中指定一個回退名是有用的。 `keepalives` 控制客戶端側的TCP保持激活是否使用。缺省值是1,意思為打開,但是如果不想要保持激活, 你可以更改為0,意思為關閉。通過Unix域套接字做的連接忽略這個參數。 `keepalives_idle` 在TCP應該發送一個保持激活的信息給服務器之后,控制不活動的秒數。 0值表示使用系統缺省。通過Unix域套接字做的連接或者如果禁用了保持激活則忽略這個參數。 只有在`TCP_KEEPIDLE`和`TCP_KEEPALIVE`套接字選項可用的系統上支持這個參數, 在Windows上還是在其他系統上是沒什么影響的。 `keepalives_interval` 在TCP保持激活信息沒有被應該傳播的服務器承認之后,控制秒數。0值表示使用系統缺省。 通過Unix域套接字做的連接或者如果禁用了保持激活則忽略這個參數。 只有在`TCP_KEEPINTVL`套接字選項可用的系統上支持這個參數, 在Windows上還是在其他系統上是沒什么影響的。 `keepalives_count` 在認為客戶端到服務器的連接死亡之前,控制可以丟失的TCP保持激活的數量。0值表示使用系統缺省。 通過Unix域套接字做的連接或者如果禁用了保持激活則忽略這個參數。 只有在`TCP_KEEPINTVL`套接字選項可用的系統上支持這個參數, 在Windows上還是在其他系統上是沒什么影響的。 `tty` 忽略(以前,這個選項聲明服務器日志的輸出方向)。 `sslmode` 這個選項決定是否需要和服務器協商一個SSL TCP/IP連接, 以及以什么樣的安全優先級與服務器進行SSL TCP/IP連接。 這里有六個模式: `disable` 只進行一個非SSL連接 `allow` 首先嘗試一個非SSL連接;如果失敗,嘗試一個SSL連接 `prefer` (default) 首先嘗試SSL連接;如果失敗,嘗試一個非SSL連接 `require` 嘗試一個SSL連接。如果有根CA文件,則按照指定了`verify-ca` 的相同方式驗證該證書 `verify-ca` 只嘗試一個SSL連接,并核實服務器證書是由一個受信任的認證中心(CA)發布的 `verify-full` 只嘗試一個SSL連接,核實服務器證書是由受信任的CA發布的, 并且該服務器主機名匹配證書中的服務器主機名。 參閱[Section 31.18](#calibre_link-502)獲取這些選項工作的詳細描述。 Unix域套接字通信忽略`sslmode`。如果PostgreSQL 編譯時沒有打開 SSL 支持,那么使用選項`require`、`verify-ca`或 `verify-full`將導致一個錯誤,而選項`allow`和`prefer` 將被接受,但是libpq實際上不會企圖進行SSL連接。 `requiressl` 這個選項因為有了`sslmode`設置之后已經廢棄了。 如果設為1,則要求與服務器進行SSL聯接(等效于`sslmode` `require`)。如果服務器不支持SSL,那么libpq 將馬上拒絕聯接。設置為0(缺省),與服務器進行協商連接類型(等效于`sslmode` `prefer`)。這個選項只有在編譯PostgreSQL時打開了 SSL 支持才有效。 `sslcompression` 如果設置為1(缺省),通過SSL連接進行的數據發送將被壓縮(這要求OpenSSL 版本0.9.8或更高)。如果設置為0,將禁用壓縮(這需要OpenSSL 1.0.0或更高)。 如果連接沒有通過SSL進行,或者如果使用的OpenSSL版本不支持它,則忽略該參數。 壓縮使用CPU時間,但是如果網絡是瓶頸,那么可以提高吞吐量。 如果CPU性能是限制因素,那么禁用壓縮可以提高響應時間和吞吐量。 `sslcert` 這個參數指定客戶端SSL認證的文件名,替換缺省的`~/.postgresql/postgresql.crt`。 如果沒有做SSL連接,則忽略這個參數。 `sslkey` 這個參數指定客戶端使用的秘鑰的位置。也可以指定一個用來替換缺省 `~/.postgresql/postgresql.key`的文件名,或者指定一個從外部 "引擎"獲取的鍵(引擎是OpenSSL可加載模塊)。 一個外部引擎聲明應該包括一個由冒號分隔的引擎名字和特定于引擎的鍵標識符。 如果沒有做SSL連接則忽略這個參數。 `sslrootcert` 這個參數聲明一個包含SSL認證授權(CA)證書的文件名。 如果該文件存在,那么將要驗證的服務器的證書將由這些授權之一簽署。 缺省是`~/.postgresql/root.crt`。 `sslcrl` 這個參數聲明SSL證書撤銷列表(CRL)的文件名。在這個文件中列出的證書, 如果該文件存在,將在嘗試認證服務器的證書時被拒絕。缺省是 `~/.postgresql/root.crl`。 `requirepeer` 這個參數聲明服務器的操作系統用戶名,例如`requirepeer=postgres`。 當制作一個Unix域套接字連接時,如果設置了該參數,那么在連接的開始, 客戶端檢查服務器進程是否運行在指定的用戶名之下;如果不是,則連接帶有錯誤退出。 這個參數可以用來提供服務器認證,類似于在TCP/IP連接上可用SSL證書。 (請注意,如果Unix域套接字在`/tmp`中或另一個公開可寫位置, 那么任意用戶都可以在這里啟動一個服務器監聽。 使用這個參數確保你連接到一個受信任的用戶運行的服務器。) 這個選項只有在實現了`peer`認證方法的平臺上支持;參閱 [Section 19.3.7](#calibre_link-503)。 `krbsrvname` 使用Kerberos 5或GSSAPI認證時使用的Kerberos服務名。 這個名字必須和服務器給Kerberos認證配置的服務名相同,才能認證成功。 (又見[Section 19.3.5](#calibre_link-504)和[Section 19.3.3](#calibre_link-505)。) `gsslib` 為GSSAPI認證使用的GSS庫。只在Windows上使用。設置為`gssapi` 強迫libpq為認證使用GSSAPI庫而不是缺省的SSPI。 `service` 用于額外參數的服務名。它在`pg_service.conf`里面聲明一個服務名, 這個配置文件保存額外的連接參數。這樣就允許應用只聲明一個服務名, 而連接參數就可以在一個地方維護了。參閱[Section 31.16](#calibre_link-506)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看