以下函式處理與 PostgreSQL 後端伺服器建立連線。應用程式可以同時開啟多個後端連線。(這樣做的一個原因是訪問多個數據庫。)每個連線由一個 PGconn
物件表示,該物件透過函式 PQconnectdb
、PQconnectdbParams
或 PQsetdbLogin
獲取。請注意,除非記憶體不足以分配 PGconn
物件,否則這些函式將始終返回非空指標。在透過連線物件傳送查詢之前,應呼叫 PQstatus
函式來檢查返回值是否成功連線。
如果不受信任的使用者可以訪問未採用 安全模式使用模式 的資料庫,請在每個會話開始時從 search_path
中刪除可公開寫入的模式。可以將引數關鍵字 options
設定為值 -csearch_path=
。或者,可以在連線後發出 PQexec(
。此注意事項並非 libpq 特有;它適用於執行任意 SQL 命令的每個介面。conn
, "SELECT pg_catalog.set_config('search_path', '', false)")
在 Unix 系統上,具有開放 libpq 連線的程序會產生不可預測的結果,因為父程序和子程序共享相同的套接字和作業系統資源。因此,不推薦使用這種方式,儘管從子程序執行 exec
來載入新可執行檔案是安全的。
PQconnectdbParams
#與資料庫伺服器建立新連線。
PGconn *PQconnectdbParams(const char * const *keywords, const char * const *values, int expand_dbname);
此函式使用來自兩個 NULL
終止陣列的引數來開啟新的資料庫連線。第一個 keywords
定義為字串陣列,每個字串都是一個關鍵字。第二個 values
為每個關鍵字提供值。與下面的 PQsetdbLogin
不同,引數集可以在不更改函式簽名的情況下進行擴充套件,因此,新應用程式程式設計首選使用此函式(或其非阻塞類比 PQconnectStartParams
和 PQconnectPoll
)。
當前識別的引數關鍵字列在 第 32.1.2 節 中。
傳遞的陣列可以為空,以使用所有預設引數,或包含一個或多個引數設定。它們必須長度匹配。處理將在 keywords
陣列的第一個 NULL
條目處停止。另外,如果與非 NULL
keywords
條目關聯的 values
條目是 NULL
或空字串,則忽略該條目,並繼續處理下一對陣列條目。
當 expand_dbname
非零時,將檢查第一個 dbname
關鍵字的值,以確定它是否為 連線字串。如果是,它將被 “展開” 成從字串中提取的各個連線引數。如果值包含等號(=
)或以 URI 方案指示符開頭,則該值被視為連線字串,而不僅僅是資料庫名稱。(有關連線字串格式的更多詳細資訊,請參閱 第 32.1.1 節。)只有 dbname
的第一次出現才這樣處理;任何後續的 dbname
引數都將被處理為普通資料庫名稱。
通常,引數陣列按從頭到尾的順序處理。如果任何關鍵字重複,則使用最後一個(非 NULL
或非空)值。此規則尤其適用於當連線字串中找到的關鍵字與 keywords
陣列中出現的關鍵字衝突時。因此,程式設計師可以確定陣列條目是覆蓋還是被連線字串中的值覆蓋。出現在展開的 dbname
條目之前的陣列條目可以被連線字串中的欄位覆蓋,而這些欄位又被 dbname
之後的陣列條目覆蓋(但同樣,僅當這些條目提供非空值時)。
在處理完所有陣列條目和任何展開的連線字串後,任何未設定的連線引數將用預設值填充。如果未設定引數的對應環境變數(請參閱 第 32.15 節)已設定,則使用其值。如果環境變數也未設定,則使用引數的內建預設值。
PQconnectdb
#與資料庫伺服器建立新連線。
PGconn *PQconnectdb(const char *conninfo);
此函式使用 conninfo
字串中的引數開啟新的資料庫連線。
傳遞的字串可以為空,以使用所有預設引數,或者可以包含一個或多個由空格分隔的引數設定,或者可以包含一個URI。有關詳細資訊,請參閱 第 32.1.1 節。
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
的前身,具有固定的引數集。它具有與 PQconnectdb
相同的功能,只是缺少引數將始終採用預設值。對於要預設的固定引數中的任何一個,請寫 NULL
或空字串。
如果 dbName
包含 =
符號或具有有效的連線URI字首,則它將被視為 conninfo
字串,與傳遞給 PQconnectdb
的情況完全相同,然後剩餘引數將按照 PQconnectdbParams
的說明進行應用。
pgtty
已不再使用,傳遞的任何值都將被忽略。
PQsetdb
#與資料庫伺服器建立新連線。
PGconn *PQsetdb(char *pghost, char *pgport, char *pgoptions, char *pgtty, char *dbName);
這是一個宏,它使用 login
和 pwd
引數的空指標呼叫 PQsetdbLogin
。它為了與非常舊的程式相容而提供。
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
引數以防止 DNS 查詢。有關此引數的詳細資訊,請參閱 第 32.1.2 節 的文件。
如果您呼叫 PQtrace
,請確保跟蹤到的流物件不會阻塞。
您必須確保在呼叫 PQconnectPoll
之前套接字處於適當狀態,如下文所述。
要開始非阻塞連線請求,請呼叫 PQconnectStart
或 PQconnectStartParams
。如果結果為 null,則 libpq 無法分配新的 PGconn
結構。否則,將返回一個有效的 PGconn
指標(儘管尚未表示與資料庫的有效連線)。接下來呼叫 PQstatus(conn)
。如果結果為 CONNECTION_BAD
,則連線嘗試已失敗,通常是因為連線引數無效。
如果 PQconnectStart
或 PQconnectStartParams
成功,下一個階段是輪詢 libpq,以便它可以繼續執行連線序列。使用 PQsocket(conn)
獲取資料庫連線底層套接字的描述符。(注意:不要假設套接字在 PQconnectPoll
呼叫之間保持不變。)按如下方式迴圈:如果 PQconnectPoll(conn)
上次返回 PGRES_POLLING_READING
,請等到套接字準備好讀取(由 select()
、poll()
或類似的系統函式指示)。請注意,PQsocketPoll
可以透過抽象 select(2)
或 poll(2)
的設定來幫助減少樣板程式碼(如果您的系統支援)。然後再次呼叫 PQconnectPoll(conn)
。反之,如果 PQconnectPoll(conn)
上次返回 PGRES_POLLING_WRITING
,請等到套接字準備好寫入,然後再次呼叫 PQconnectPoll(conn)
。在第一次迭代時,即如果您尚未呼叫 PQconnectPoll
,則行為如同它上次返回 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_GSS_STARTUP
#正在協商 GSS 加密。
CONNECTION_CHECK_WRITABLE
#檢查連線是否能夠處理寫事務。
CONNECTION_CHECK_STANDBY
#檢查連線是否是到處於待機模式的伺服器。
CONNECTION_CONSUME
#消耗連線上的任何剩餘響應訊息。
請注意,儘管這些常量會保留(以保持相容性),但應用程式不應依賴於它們以特定順序出現,或以任何順序出現,或依賴於狀態始終是這些文件化值之一。應用程式可以這樣做:
switch(PQstatus(conn)) { case CONNECTION_STARTED: feedback = "Connecting..."; break; case CONNECTION_MADE: feedback = "Connected to server..."; break; . . . default: feedback = "Connecting..."; }
使用 PQconnectPoll
時會忽略 connect_timeout
連線引數;應用程式負責決定是否經過了過多的時間。否則,PQconnectStart
加上 PQconnectPoll
迴圈等同於 PQconnectdb
。
請注意,當 PQconnectStart
或 PQconnectStartParams
返回非空指標時,當您完成使用它後,必須呼叫 PQfinish
來釋放結構和任何關聯的記憶體塊。即使連線嘗試失敗或被放棄,也必須這樣做。
PQsocketPoll
# 輪詢透過 PQsocket
檢索到的連線的底層套接字描述符。此函式的主要用途是遍歷 PQconnectStartParams
文件中描述的連線序列。
typedef int64_t pg_usec_time_t; int PQsocketPoll(int sock, int forRead, int forWrite, pg_usec_time_t end_time);
此函式執行檔案描述符的輪詢,可選地帶超時。如果 forRead
非零,函式將在套接字可讀時終止。如果 forWrite
非零,函式將在套接字可寫時終止。
超時由 end_time
指定,它表示停止等待的時間,以自 Unix 紀元(即 time_t
乘以一百萬)以來的微秒數表示。如果 end_time
為 -1
,則超時是無限的。如果 end_time
為 0
(或實際上,在當前時間之前),則超時是即時的(無阻塞)。可以透過將所需的微秒數新增到 PQgetCurrentTimeUSec
的結果來方便地計算超時值。請注意,底層系統呼叫可能精度低於微秒,因此實際延遲可能不精確。
如果滿足指定條件,函式返回大於 0
的值;如果發生超時,則返回 0
;如果發生錯誤,則返回 -1
。可以透過檢查 errno(3)
值來檢索錯誤。如果 forRead
和 forWrite
都為零,則函式立即返回超時指示。
PQsocketPoll
使用 poll(2)
或 select(2)
實現,具體取決於平臺。有關更多資訊,請參閱 poll(2)
中的 POLLIN
和 POLLOUT
,或 select(2)
中的 readfds
和 writefds
。
PQconndefaults
#返回預設連線選項。
PQconninfoOption *PQconndefaults(void); typedef struct { char *keyword; /* The keyword of the option */ char *envvar; /* Fallback environment variable name */ char *compiled; /* Fallback compiled in default value */ char *val; /* Option's current value, or NULL */ char *label; /* Label for field in connect dialog */ char *dispchar; /* Indicates how to display this field in a connect dialog. Values are: "" Display entered value as is "*" Password field - hide value "D" Debug option - don't show by default */ int dispsize; /* Field size in characters for dialog */ } PQconninfoOption;
返回連線選項陣列。這可用於確定所有可能的 PQconnectdb
選項及其當前預設值。返回值指向 PQconninfoOption
結構的陣列,該陣列以 keyword
指標為 NULL
的條目結束。如果記憶體分配失敗,則返回空指標。請注意,當前預設值(val
欄位)將取決於環境變數和其他上下文。缺失或無效的服務檔案將被靜默忽略。呼叫者必須將連線選項資料視為只讀。
處理完選項陣列後,透過將其傳遞給 PQconninfoFree
來釋放它。如果未執行此操作,每次呼叫 PQconndefaults
都會洩漏少量記憶體。
PQconninfo
#返回活動連線使用的連線選項。
PQconninfoOption *PQconninfo(PGconn *conn);
返回連線選項陣列。這可用於確定所有可能的 PQconnectdb
選項以及用於連線到伺服器的值。返回值指向 PQconninfoOption
結構的陣列,該陣列以 keyword
指標為 NULL
的條目結束。上面關於 PQconndefaults
的所有註釋也適用於 PQconninfo
的結果。
PQconninfoParse
#從提供的連線字串返回已解析的連線選項。
PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg);
解析連線字串並返回結果選項作為陣列;如果連線字串有問題,則返回 NULL
。此函式可用於提取提供的連線字串中的 PQconnectdb
選項。返回值指向 PQconninfoOption
結構的陣列,該陣列以 keyword
指標為 NULL
的條目結束。
所有合法的選項都將存在於結果陣列中,但對於連線字串中不存在的任何選項,其 PQconninfoOption
的 val
將設定為 NULL
;不插入預設值。
如果 errmsg
不為 NULL
,則成功時 *errmsg
設定為 NULL
,否則設定為解釋問題的 malloc
'd 錯誤字串。(*errmsg
也可能被設定為 NULL
並且函式返回 NULL
;這表示記憶體不足的情況。)
處理完選項陣列後,透過將其傳遞給 PQconninfoFree
來釋放它。如果未執行此操作,每次呼叫 PQconninfoParse
都會洩漏一些記憶體。反之,如果發生錯誤且 errmsg
不為 NULL
,請務必使用 PQfreemem
釋放錯誤字串。
PQfinish
#關閉與伺服器的連線。還會釋放 PGconn
物件使用的記憶體。
void PQfinish(PGconn *conn);
請注意,即使伺服器連線嘗試失敗(如 PQstatus
所指示),應用程式也應呼叫 PQfinish
來釋放 PGconn
物件使用的記憶體。PGconn
指標在呼叫 PQfinish
後不得再次使用。
PQreset
#重置與伺服器的通訊通道。
void PQreset(PGconn *conn);
此函式將關閉與伺服器的連線,並嘗試建立新連線,使用所有先前使用的相同引數。如果工作連線丟失,這對於錯誤恢復可能很有用。
PQresetStart
PQresetPoll
#以非阻塞方式重置與伺服器的通訊通道。
int PQresetStart(PGconn *conn); PostgresPollingStatusType PQresetPoll(PGconn *conn);
這些函式將關閉與伺服器的連線,並嘗試建立新連線,使用所有先前使用的相同引數。如果工作連線丟失,這對於錯誤恢復可能很有用。它們與 PQreset
(上面)的區別在於它們是非阻塞方式的。這些函式與 PQconnectStartParams
、PQconnectStart
和 PQconnectPoll
存在相同的限制。
要發起連線重置,請呼叫 PQresetStart
。如果它返回 0,則重置失敗。如果它返回 1,則使用 PQresetPoll
以與使用 PQconnectPoll
建立連線完全相同的方式輪詢重置。
PQpingParams
#PQpingParams
報告伺服器的狀態。它接受與 PQconnectdbParams
相同的連線引數,如上所述。為了獲取伺服器狀態,不必提供正確的使用者名稱、密碼或資料庫名稱值;但是,如果提供了不正確的值,伺服器將記錄一個失敗的連線嘗試。
PGPing PQpingParams(const char * const *keywords, const char * const *values, int expand_dbname);
該函式返回以下值之一
PQping
#PQping
報告伺服器的狀態。它接受與 PQconnectdb
相同的連線引數,如上所述。為了獲取伺服器狀態,不必提供正確的使用者名稱、密碼或資料庫名稱值;但是,如果提供了不正確的值,伺服器將記錄一個失敗的連線嘗試。
PGPing PQping(const char *conninfo);
返回值與 PQpingParams
相同。
PQsetSSLKeyPassHook_OpenSSL
#PQsetSSLKeyPassHook_OpenSSL
允許應用程式使用 sslpassword 或互動式提示來覆蓋 libpq 對 加密的客戶端證書金鑰檔案的預設處理。
void PQsetSSLKeyPassHook_OpenSSL(PQsslKeyPassHook_OpenSSL_type hook);
應用程式傳遞一個指向簽名函式的回撥函式的指標
int callback_fn(char *buf, int size, PGconn *conn);
然後,libpq 將呼叫該函式 而不是 其預設的 PQdefaultSSLKeyPassHook_OpenSSL
處理程式。回撥函式應確定金鑰的密碼,並將其複製到大小為 size
的結果緩衝區 buf
中。buf
中的字串必須以 null 結尾。回撥函式必須返回儲存在 buf
中(不包括 null 終止符)的密碼的長度。失敗時,回撥函式應將 buf[0] = '\0'
設定為 0。有關示例,請參閱 libpq 原始碼中的 PQdefaultSSLKeyPassHook_OpenSSL
。
如果使用者指定了顯式金鑰位置,當呼叫回撥函式時,其路徑將位於 conn->sslkey
中。如果使用預設金鑰路徑,則此值將為空。對於作為引擎指定符的金鑰,引擎實現可以選擇使用 OpenSSL 密碼回撥函式或定義自己的處理方式。
應用程式回撥可以選擇將未處理的情況委託給 PQdefaultSSLKeyPassHook_OpenSSL
,或者首先呼叫它,如果它返回 0,則嘗試其他方法,或者完全覆蓋它。
回撥函式不得透過異常、longjmp(...)
等方式逃離正常的流程控制。它必須正常返回。
PQgetSSLKeyPassHook_OpenSSL
#PQgetSSLKeyPassHook_OpenSSL
返回當前客戶端證書金鑰密碼鉤子,如果未設定任何鉤子,則返回 NULL
。
PQsslKeyPassHook_OpenSSL_type PQgetSSLKeyPassHook_OpenSSL(void);
幾個 libpq 函式解析使用者指定的字串以獲取連線引數。這些字串有兩種可接受的格式:純關鍵字/值字串和 URI。URI 通常遵循 RFC 3986,但允許使用多主機連線字串,如下所述。
在關鍵字/值格式中,每個引數設定的形式為 keyword
=
value
,設定之間用空格分隔。設定的等號周圍的空格是可選的。要寫入空值或包含空格的值,請將其用單引號括起來,例如 keyword = 'a value'
。值中的單引號和反斜槓必須用反斜槓轉義,即 \'
和 \\
。
示例:
host=localhost port=5432 dbname=mydb connect_timeout=10
識別的引數關鍵字列在 第 32.1.2 節 中。
連線的一般形式URI是
postgresql://[userspec
@][hostspec
][/dbname
][?paramspec
] whereuserspec
is:user
[:password
] andhostspec
is: [host
][:port
][,...] andparamspec
is:name
=value
[&...]
該URI方案識別符號可以是 postgresql://
或 postgres://
。其餘的每個URI部分是可選的。以下示例說明了有效的URI語法
postgresql:// postgresql:// postgresql://:5433 postgresql:///mydb postgresql://user@localhost postgresql://user:secret@localhost postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp postgresql://host1:123,host2:456/somedb?target_session_attrs=any&application_name=myapp
通常出現在分層部分的URI值可以替代地作為命名引數提供。例如
postgresql:///mydb?host=localhost&port=5433
所有命名引數必須匹配 第 32.1.2 節 中列出的關鍵字,除了為了與 JDBC 連線相容URI的情況下,ssl=true
的例項會被轉換為 sslmode=require
。
連線URI如果包含在任何部分具有特殊含義的符號,則需要使用 百分比編碼進行編碼。這裡是一個例子,其中等號 (=
) 被替換為 %3D
,空格字元被替換為 %20
postgresql://user@localhost:5433/mydb?options=-c%20synchronous_commit%3Doff
主機部分可以是主機名或 IP 地址。要指定 IPv6 地址,請將其括在方括號中
postgresql://[2001:db8::1234]/database
主機部分按照 host 引數的描述進行解釋。特別是,如果主機部分為空或看起來像絕對路徑名,則選擇 Unix 域套接字連線,否則將建立 TCP/IP 連線。但是請注意,斜槓是 URI 分層部分的保留字元。因此,要指定非標準的 Unix 域套接字目錄,請省略 URI 的主機部分並將主機指定為命名引數,或者對 URI 的主機部分中的路徑進行百分比編碼
postgresql:///dbname?host=/var/lib/postgresql postgresql://%2Fvar%2Flib%2Fpostgresql/dbname
可以在單個 URI 中指定多個主機元件,每個元件可選地帶有一個埠元件。形式為 postgresql://host1:port1,host2:port2,host3:port3/
的 URI 等同於形式為 host=host1,host2,host3 port=port1,port2,port3
的連線字串。如下文所述,將依次嘗試每個主機,直到成功建立連線。
可以指定多個要連線的主機,以便按給定順序嘗試它們。在關鍵字/值格式中,host
、hostaddr
和 port
選項接受逗號分隔的值列表。在指定的每個選項中必須給出相同數量的元素,例如,第一個 hostaddr
對應第一個主機名,第二個 hostaddr
對應第二個主機名,依此類推。作為例外,如果只指定了一個 port
,則它適用於所有主機。
在連線 URI 格式中,可以在 URI 的 host
元件中列出多個以逗號分隔的 host:port
對。
在這兩種格式中,單個主機名都可以轉換為多個網路地址。一個常見的例子是同時具有 IPv4 和 IPv6 地址的主機。
當指定了多個主機,或者當單個主機名解析為多個地址時,將按順序嘗試所有主機和地址,直到其中一個成功為止。如果無法連線到任何主機,則連線失敗。如果成功建立了連線但身份驗證失敗,則列表中的其餘主機將不會被嘗試。
如果使用密碼檔案,您可以為不同的主機設定不同的密碼。列表中的每個主機都具有相同的其他連線選項;例如,不能為不同的主機指定不同的使用者名稱。
當前識別的引數關鍵字是
host
#要連線的主機名。 如果主機名看起來像絕對路徑名,則它指定 Unix 域通訊而不是 TCP/IP 通訊;該值是儲存套接字檔案的目錄的名稱。(在 Unix 上,絕對路徑名以斜槓開頭。在 Windows 上,以驅動器字母開頭的路徑也被識別。)如果主機名以 @
開頭,則將其視為抽象名稱空間中的 Unix 域套接字(目前在 Linux 和 Windows 上支援)。預設行為是當未指定 host
或 host
為空時,連線到 Unix 域套接字在 /tmp
中(或在編譯 PostgreSQL 時指定的任何套接字目錄)。在 Windows 上,預設是連線到 localhost
。
也接受逗號分隔的主機名列表,在這種情況下,將按順序嘗試列表中的每個主機名;列表中的空項選擇上述解釋的預設行為。有關詳細資訊,請參閱 第 32.1.1.3 節。
hostaddr
#要連線的主機的數字 IP 地址。這應該是標準的 IPv4 地址格式,例如 172.28.40.9
。如果您的機器支援 IPv6,您也可以使用這些地址。當為此引數指定非空字串時,始終使用 TCP/IP 通訊。如果未指定此引數,則會查詢 host
的值以查詢相應的 IP 地址 — 或者,如果 host
指定了 IP 地址,則直接使用該值。
使用 hostaddr
可以讓應用程式避免主機名查詢,這在對時間有要求的應用程式中可能很重要。但是,GSSAPI 或 SSPI 身份驗證方法以及 verify-full
SSL 證書驗證都需要主機名。使用以下規則
如果指定了 host
而未指定 hostaddr
,則會發生主機名查詢。(當使用 PQconnectPoll
時,查詢會在 PQconnectPoll
首次考慮此主機名時發生,並且可能導致 PQconnectPoll
阻塞很長時間。)
如果指定了 hostaddr
而未指定 host
,則 hostaddr
的值給出伺服器網路地址。如果身份驗證方法要求主機名,則連線嘗試將失敗。
如果同時指定了 host
和 hostaddr
,則 hostaddr
的值給出伺服器網路地址。除非身份驗證方法需要 host
,否則將忽略 host
的值,在這種情況下,它將被用作主機名。
請注意,如果 host
不是 hostaddr
網路地址處的伺服器名稱,身份驗證很可能會失敗。此外,當同時指定 host
和 hostaddr
時,host
用於在密碼檔案中標識連線(請參閱 第 32.16 節)。
也接受逗號分隔的 hostaddr
值列表,在這種情況下,將按順序嘗試列表中的每個主機。列表中的空項會導致使用相應的主機名,或者如果主機名也為空,則使用預設主機名。有關詳細資訊,請參閱 第 32.1.1.3 節。
如果沒有主機名或主機地址,libpq 將使用本地 Unix 域套接字進行連線;或者在 Windows 上,它將嘗試連線到 localhost
。
port
#連線到伺服器主機上的埠號,或 Unix 域連線的套接字檔名擴充套件。 如果在 host
或 hostaddr
引數中給出了多個主機,則此引數可以指定一個與主機列表長度相同的逗號分隔的埠列表,或者可以指定一個適用於所有主機的單個埠號。空字串或逗號分隔列表中的空項指定在編譯 PostgreSQL 時建立的預設埠號。
dbname
#資料庫名稱。預設與使用者名稱相同。在某些上下文中,將檢查值是否存在擴充套件格式;有關更多詳細資訊,請參閱 第 32.1.1 節。
user
#要連線的 PostgreSQL 使用者名稱。預設與執行應用程式的作業系統使用者名稱相同。
password
#如果伺服器要求密碼身份驗證,則使用的密碼。
passfile
#指定用於儲存密碼的檔名(請參閱 第 32.16 節)。預設值為 ~/.pgpass
,或 Microsoft Windows 上的 %APPDATA%\postgresql\pgpass.conf
。(如果此檔案不存在,則不報告錯誤。)
require_auth
#指定客戶端要求的伺服器的身份驗證方法。如果伺服器不使用所需方法對客戶端進行身份驗證,或者身份驗證握手未由伺服器完全完成,則連線將失敗。還可以提供方法組成的逗號分隔列表,伺服器必須僅使用其中一種方法才能使連線成功。預設情況下,接受任何身份驗證方法,並且伺服器可以完全跳過身份驗證。
方法可以透過新增 !
字首來否定,在這種情況下,伺服器不得嘗試列出的方法;接受任何其他方法,並且伺服器可以完全不驗證客戶端。如果提供了逗號分隔的列表,則伺服器不得嘗試任何列出的否定方法。不能在同一設定中組合否定和非否定形式。
作為最後一個特殊情況,none
方法要求伺服器不提示進行身份驗證。(它也可以被否定,以要求某種形式的身份驗證。)
以下方法可以指定
password
伺服器必須請求明文密碼身份驗證。
md5
伺服器必須請求 MD5 雜湊密碼身份驗證。
MD5 加密密碼的支援已棄用,將在 PostgreSQL 的未來版本中移除。有關遷移到其他密碼型別的詳細資訊,請參閱第 20.5 節。
gss
伺服器必須透過以下方式請求 Kerberos 握手GSSAPI或建立一個GSS-加密通道(另請參閱 gssencmode)。
sspi
伺服器必須請求 WindowsSSPI身份驗證。
scram-sha-256
伺服器必須成功地與客戶端完成 SCRAM-SHA-256 身份驗證交換。
oauth
伺服器必須從客戶端請求 OAuth 承載令牌。
none
伺服器不得提示客戶端進行身份驗證交換。(這並不阻止透過 TLS 進行客戶端證書身份驗證,也不阻止透過其加密傳輸進行 GSS 身份驗證。)
channel_binding
#此選項控制客戶端的通道繫結使用情況。設定為 require
表示連線必須使用通道繫結,prefer
表示客戶端將在可用時選擇通道繫結,而 disable
則阻止使用通道繫結。如果 PostgreSQL 是使用 SSL 支援編譯的,則預設值為 prefer
;否則預設值為 disable
。
通道繫結是伺服器向客戶端進行身份驗證的一種方法。它僅在與 PostgreSQL 11 或更高版本伺服器使用 SCRAM
身份驗證方法配合的 SSL 連線上受支援。
connect_timeout
#連線時等待的最大時間(以秒為單位,寫入為十進位制整數,例如 10
)。零、負數或未指定表示無限期等待。此超時分別適用於每個主機名或 IP 地址。例如,如果您指定了兩個主機且 connect_timeout
為 5,則每個主機將在 5 秒內超時而未建立連線,因此等待連線的總時間可能長達 10 秒。
client_encoding
#這會為當前連線設定 client_encoding
配置引數。除了伺服器對應選項接受的值外,您還可以使用 auto
來確定來自客戶端當前區域設定(Unix 系統上的 LC_CTYPE
環境變數)的正確編碼。
options
#指定要在連線開始時傳送到伺服器的命令列選項。例如,將其設定為 -c geqo=off
或 --geqo=off
會將會話的 geqo
引數值設定為 off
。此字串中的空格被視為分隔命令列引數,除非被反斜槓(\
)轉義;寫入 \\
以表示字面上的反斜槓。有關可用選項的詳細討論,請參閱 第 19 章。
application_name
#為 application_name 配置引數指定值。
fallback_application_name
#為 application_name 配置引數指定備用值。如果沒有透過連線引數或 PGAPPNAME
環境變數給出 application_name
的值,則將使用此值。為通用實用程式指定備用名稱很有用,這些實用程式希望設定預設應用程式名稱但允許使用者覆蓋它。
keepalives
#控制是否使用客戶端 TCP keepalives。預設值為 1,表示開啟,但如果不需要 keepalives,您可以將其更改為 0,表示關閉。對於透過 Unix 域套接字建立的連線,忽略此引數。
keepalives_idle
#控制在 TCP 傳送 keepalive 訊息到伺服器之前閒置的秒數。值為零表示使用系統預設值。對於透過 Unix 域套接字建立的連線,或者如果 keepalives 已停用,則忽略此引數。僅在 TCP_KEEPIDLE
或等效套接字選項可用並且在 Windows 上可用時才支援此引數;在其他系統上,它沒有影響。
keepalives_interval
#控制未被伺服器確認的 TCP keepalive 訊息重傳的秒數。值為零表示使用系統預設值。對於透過 Unix 域套接字建立的連線,或者如果 keepalives 已停用,則忽略此引數。僅在 TCP_KEEPINTVL
或等效套接字選項可用並且在 Windows 上可用時才支援此引數;在其他系統上,它沒有影響。
keepalives_count
#控制在客戶端與伺服器的連線被視為死連線之前可以丟失的 TCP keepalives 數量。值為零表示使用系統預設值。對於透過 Unix 域套接字建立的連線,或者如果 keepalives 已停用,則忽略此引數。僅在 TCP_KEEPCNT
或等效套接字選項可用時才支援此引數;在其他系統上,它沒有影響。
tcp_user_timeout
#控制已傳送資料在連線被強制關閉之前可能保持未確認狀態的毫秒數。值為零表示使用系統預設值。對於透過 Unix 域套接字建立的連線,則忽略此引數。僅在 TCP_USER_TIMEOUT
可用時才支援此引數;在其他系統上,它沒有影響。
replication
#此選項確定連線是否應使用複製協議而不是正常協議。這就是 PostgreSQL 複製連線以及 pg_basebackup 等工具內部使用的協議,但第三方應用程式也可以使用它。有關複製協議的描述,請參閱 第 54.4 節。
以下值(不區分大小寫)受支援
true
、on
、yes
、1
連線進入物理複製模式。
database
連線進入邏輯複製模式,連線到 dbname
引數中指定的資料庫。
false
、off
、no
、0
連線是常規連線,這是預設行為。
在物理或邏輯複製模式下,只能使用簡單查詢協議。
gssencmode
#此選項決定是否以及以何種優先順序與伺服器協商安全的GSSTCP/IP 連線。有三種模式
disable
僅嘗試非GSSAPI-加密連線
prefer
(預設)如果存在GSSAPI憑據(即,在憑據快取中),首先嚐試GSSAPI-加密連線;如果失敗或沒有憑據,則嘗試非GSSAPI-加密連線。這是 PostgreSQL 編譯時GSSAPI支援的預設值。
require
僅嘗試GSSAPI-加密連線
-加密連線。如果 PostgreSQL 是使用 GSSAPI 支援編譯的,使用 require
選項將導致錯誤,而 prefer
將被接受,但 libpq 實際上不會嘗試GSSAPI-加密連線。
sslmode
#此選項決定是否以及以何種優先順序與伺服器協商安全的SSL與伺服器協商 TCP/IP 連線。有六種模式
disable
僅嘗試非SSLconnection
allow
首先嚐試非SSLconnection;如果失敗,則嘗試SSLconnection
prefer
(預設)first try anSSLconnection; if that fails, try a non-SSLconnection
require
only try anSSLconnection。如果存在根 CA 檔案,則以與指定 verify-ca
相同的方式驗證證書
verify-ca
only try anSSLconnection,並驗證伺服器證書是由受信任的證書頒發機構(CA)
verify-full
only try anSSLconnection,驗證伺服器證書是由受信任的CA頒發的,並且請求的伺服器主機名與證書中的主機名匹配
有關這些選項如何工作的詳細說明,請參閱 第 32.19 節。
對於 Unix 域套接字通訊,sslmode
被忽略。如果 PostgreSQL 是在沒有 SSL 支援的情況下編譯的,使用 require
、verify-ca
或 verify-full
選項將導致錯誤,而 allow
和 prefer
選項將被接受,但 libpq 實際上不會嘗試SSL-encrypted connection.
請注意,如果GSSAPI加密是可能的,將優先使用它而不是SSL加密,無論 sslmode
的值如何。要在具有可用SSL基礎結構(例如 Kerberos 伺服器)的環境中強制使用GSSAPI加密,還將 gssencmode
設定為 disable
。
requiressl
#此選項已棄用,改用 sslmode
設定。
如果設定為 1,則需要與伺服器建立SSL-encrypted connection(這等同於 sslmode
require
)。然後,如果伺服器不接受SSL-encrypted connection,libpq 將拒絕連線。如果設定為 0(預設),libpq 將與伺服器協商連線型別(等同於 sslmode
prefer
)。只有在 PostgreSQL 編譯了 SSL 支援的情況下,此選項才可用。
sslnegotiation
#此選項控制如何與伺服器協商 SSL 加密(如果使用 SSL)。在預設的 postgres
模式下,客戶端首先詢問伺服器是否支援 SSL。在 direct
模式下,客戶端在建立 TCP/IP 連線後立即啟動標準的 SSL 握手。傳統的 PostgreSQL 協議協商對於不同的伺服器配置最為靈活。如果已知伺服器支援直接SSL連線,則後者需要少一次往返,從而減少連線延遲,並且還允許使用協議無關的 SSL 網路工具。直接 SSL 選項是在 PostgreSQL 版本 17 中引入的。
postgres
執行 PostgreSQL 協議協商。如果未提供該選項,則這是預設設定。
direct
在建立 TCP/IP 連線後立即啟動 SSL 握手。這僅允許與 sslmode=require
或更高級別一起使用,因為較弱的設定可能導致在伺服器不支援直接 SSL 握手時意外回退到明文身份驗證。
sslcompression
#如果設定為 1,則 SSL 連線上傳輸的資料將被壓縮。如果設定為 0,則停用壓縮。預設值為 0。如果使用非 SSL 連線,則忽略此引數。
SSL 壓縮現在被認為是不安全的,並且不再推薦使用。 OpenSSL 1.1.0 預設停用了壓縮,並且許多作業系統發行版在早期版本中也停用了它,因此如果伺服器不接受壓縮,將此引數設定為 on 將不起任何作用。 PostgreSQL 14 在後端完全停用了壓縮。
如果安全性不是主要關注點,壓縮可以提高吞吐量(如果網路是瓶頸)。如果 CPU 效能是限制因素,停用壓縮可以提高響應時間和吞吐量。
sslcert
#此引數指定客戶端 SSL 證書的檔名,替換預設的 ~/.postgresql/postgresql.crt
。如果未建立 SSL 連線,則忽略此引數。
sslkey
#此引數指定用於客戶端證書的金鑰的位置。它可以指定一個檔名,該檔名將替換預設的 ~/.postgresql/postgresql.key
,或者它可以指定從外部“引擎”(引擎是 OpenSSL 可載入模組)獲取的金鑰。外部引擎規範應由一個冒號分隔的引擎名稱和一個特定於引擎的金鑰識別符號組成。如果未建立 SSL 連線,則忽略此引數。
sslkeylogfile
#此引數指定 libpq 在此 SSL 上下文中記錄金鑰的位置。這對於除錯 PostgreSQL 協議互動或使用 Wireshark 等網路檢查工具的客戶端連線很有用。如果未建立 SSL 連線,或未使用 LibreSSL(LibreSSL 不支援金鑰日誌記錄),則忽略此引數。金鑰使用 NSS 格式記錄。
金鑰日誌記錄會在 keylog 檔案中暴露潛在的敏感資訊。金鑰日誌檔案應與處理 sslkey 檔案的同等謹慎度來處理。
sslpassword
#此引數指定 sslkey
中金鑰的密碼,允許客戶端證書私鑰以加密形式儲存在磁碟上,即使互動式輸入密碼不切實際。
使用此引數並提供任何非空值將抑制 OpenSSL 在向 libpq 提供加密的客戶端證書金鑰時預設發出的 Enter PEM pass phrase:
提示。
如果金鑰未加密,則忽略此引數。該引數對 OpenSSL 引擎指定的金鑰沒有影響,除非引擎使用 OpenSSL 密碼回撥機制進行提示。
此選項沒有環境變數等效項,也沒有在 .pgpass
中查詢的機制。它可以在服務檔案連線定義中使用。有更復雜用途的使用者應考慮使用 OpenSSL 引擎和 PKCS#11 或 USB 加密解除安裝裝置等工具。
sslcertmode
#此選項確定是否可以向伺服器傳送客戶端證書,以及是否要求伺服器請求客戶端證書。有三種模式
disable
客戶端證書永遠不會發送,即使存在(預設位置或透過 sslcert 提供)。
allow
(預設)如果伺服器請求證書並且客戶端有可傳送的證書,則可以傳送證書。
require
伺服器必須請求證書。如果客戶端不傳送證書且伺服器仍成功驗證客戶端,則連線將失敗。
sslcertmode=require
不會增加任何額外的安全性,因為不能保證伺服器正確驗證證書;PostgreSQL 伺服器通常會向客戶端請求 TLS 證書,無論它們是否驗證。此選項在排查更復雜的 TLS 設定時可能很有用。
sslrootcert
#此引數指定包含 SSL 證書頒發機構 (CA) 證書的檔案的名稱。如果檔案存在,伺服器的證書將被驗證為由其中一個頒發機構簽名。預設值為 ~/.postgresql/root.crt
。
可以指定特殊值 system
,在這種情況下將載入 SSL 實現中受信任的 CA 根證書。這些根證書的確切位置因 SSL 實現和平臺而異。特別是對於 OpenSSL,SSL_CERT_DIR
和 SSL_CERT_FILE
環境變數可能會進一步修改這些位置。
使用 sslrootcert=system
時,預設的 sslmode
會更改為 verify-full
,任何更弱的設定都會導致錯誤。在大多數情況下,任何人都可以輕鬆獲取受系統信任的、用於其控制的主機的證書,從而使 verify-ca
和所有更弱的模式變得無用。
魔術值 system
將優先於同名的本地證書檔案。如果出於某種原因您發現自己處於這種情況,請改用替代路徑,例如 sslrootcert=./system
。
sslcrl
#此引數指定 SSL 伺服器證書吊銷列表 (CRL) 的檔名。如果存在此檔案,其中列出的證書將在嘗試驗證伺服器證書時被拒絕。如果未設定 sslcrl 也未設定 sslcrldir,則此設定將按 ~/.postgresql/root.crl
處理。
sslcrldir
#此引數指定 SSL 伺服器證書吊銷列表 (CRL) 的目錄名。如果存在此目錄,其中列出的證書將在嘗試驗證伺服器證書時被拒絕。
目錄需要使用 OpenSSL 命令 openssl rehash
或 c_rehash
進行準備。有關詳細資訊,請參閱其文件。
可以同時指定 sslcrl
和 sslcrldir
。
sslsni
#如果設定為 1 (預設),libpq 會在啟用 SSL 的連線上設定 TLS 擴充套件“伺服器名稱指示” (SNI)。將此引數設定為 0 可以停用此功能。
SSL 感知的代理可以使用伺服器名稱指示來路由連線,而無需解密 SSL 流。(請注意,除非代理感知 PostgreSQL 協議握手,否則這需要將 sslnegotiation
設定為 direct
。) 然而,SNI這會使目標主機名以明文形式出現在網路流量中,因此在某些情況下可能不希望這樣做。
requirepeer
#此引數指定伺服器的作業系統使用者名稱,例如 requirepeer=postgres
。在建立 Unix 域套接字連線時,如果設定了此引數,客戶端將在連線開始時檢查伺服器程序是否以指定的使用者名稱執行;如果不是,連線將被中止並報錯。此引數可用於提供類似於 TCP/IP 連線上 SSL 證書提供的伺服器身份驗證。 (請注意,如果 Unix 域套接字位於 /tmp
或其他可公開寫入的位置,任何使用者都可以啟動一個監聽在那裡的伺服器。使用此引數可確保您連線到的是由受信任使用者執行的伺服器。) 此選項僅在實現了 peer
身份驗證方法的平臺上受支援;請參閱 第 20.9 節。
ssl_min_protocol_version
#此引數指定允許連線的最小 SSL/TLS 協議版本。有效值為 TLSv1
、TLSv1.1
、TLSv1.2
和 TLSv1.3
。支援的協議取決於使用的 OpenSSL 版本,舊版本不支援最新的協議版本。如果未指定,則預設為 TLSv1.2
,這符合當前行業最佳實踐。
ssl_max_protocol_version
#此引數指定允許連線的最大 SSL/TLS 協議版本。有效值為 TLSv1
、TLSv1.1
、TLSv1.2
和 TLSv1.3
。支援的協議取決於使用的 OpenSSL 版本,舊版本不支援最新的協議版本。如果未設定,則忽略此引數,並且連線將使用後端定義的最高邊界(如果已設定)。設定最大協議版本主要用於測試或當某些元件在與較新協議配合使用時遇到問題時。
min_protocol_version
#指定允許連線的最小協議版本。預設允許 libpq 支援的任何 PostgreSQL 協議版本,目前是 3.0
。如果伺服器不支援至少此協議版本,連線將被關閉。
當前支援的值包括 3.0
、3.2
和 latest
。latest
值等同於所使用的 libpq 版本支援的最新協議版本,目前是 3.2
。
max_protocol_version
#指定向伺服器請求的協議版本。預設情況下,使用 PostgreSQL 協議的 3.0
版本,除非連線字串指定了依賴於更高協議版本的功能,在這種情況下,將使用 libpq 支援的最新版本。如果伺服器不支援客戶端請求的協議版本,連線將自動降級到伺服器支援的較低次要協議版本。連線嘗試完成後,您可以使用 PQprotocolVersion
來了解確切協商的協議版本。
當前支援的值包括 3.0
、3.2
和 latest
。latest
值等同於所使用的 libpq 版本支援的最新協議版本,目前是 3.2
。
krbsrvname
#使用 GSSAPI 進行身份驗證時要使用的 Kerberos 服務名。這必須與伺服器配置中為 Kerberos 身份驗證指定的#服務名匹配(另請參閱 第 20.6 節。)預設值通常是 postgres
,但可以透過 configure 的 --with-krb-srvnam
選項在構建 PostgreSQL 時更改。在大多數環境中,此引數無需更改。某些 Kerberos 實現可能需要不同的服務名,例如 Microsoft Active Directory 需要服務名大寫(POSTGRES
)。
gsslib
#用於 GSSAPI 身份驗證的 GSS 庫。目前,此引數除了 Windows 版本中包含 GSSAPI 和 SSPI 支援的情況外,其他情況均被忽略。在這種情況下,將其設定為 gssapi
將使 libpq 使用 GSSAPI 庫進行身份驗證,而不是預設的 SSPI。
gssdelegation
#將 GSS 憑證轉發(委派)給伺服器。預設值為 0
,表示憑證不會轉發給伺服器。將其設定為 1
以在可能時轉發憑證。
scram_client_key
#Base64 編碼的 SCRAM 客戶端金鑰。這可以由外部資料包裝器或類似中介軟體使用,以啟用直通 SCRAM 身份驗證。其中一種實現的示例請參見 第 F.38.1.10 節。它不應由使用者或客戶端應用程式直接指定。
scram_server_key
#Base64 編碼的 SCRAM 伺服器金鑰。這可以由外部資料包裝器或類似中介軟體使用,以啟用直通 SCRAM 身份驗證。其中一種實現的示例請參見 第 F.38.1.10 節。它不應由使用者或客戶端應用程式直接指定。
service
#用於附加引數的服務名。它指定 pg_service.conf
檔案中的一個服務名,該服務名包含附加的連線引數。這允許應用程式僅指定一個服務名,以便可以集中維護連線引數。請參閱 第 32.17 節。
target_session_attrs
#此選項決定會話是否必須具有某些屬性才能被接受。它通常與多個主機名結合使用,以在多個主機中選擇第一個可接受的備用主機。有六種模式:
any
(預設)任何成功的連線都可接受
read-write
會話預設必須接受讀寫事務(即,伺服器不能處於熱備用模式,並且 default_transaction_read_only
引數必須是 off
)
read-only
會話預設必須不接受讀寫事務(反之亦然)
primary
伺服器不能處於熱備用模式
standby
伺服器必須處於熱備用模式
prefer-standby
首先嚐試查詢備用伺服器,但如果列出的主機中沒有備用伺服器,則以 any
模式重試
load_balance_hosts
#控制客戶端嘗試連線可用主機和地址的順序。一旦連線嘗試成功,將不再嘗試其他主機和地址。此引數通常與多個主機名或返回多個 IP 的 DNS 記錄結合使用。此引數可以與 target_session_attrs 結合使用,例如,僅在備用伺服器之間進行負載均衡。成功連線後,返回連線上的後續查詢都將傳送到同一伺服器。目前有兩種模式:
disable
(預設)不執行主機之間的負載均衡。主機按提供的順序嘗試,地址按從 DNS 或主機檔案中接收的順序嘗試。
random
主機和地址按隨機順序嘗試。此值主要在同時開啟多個連線時有用,可能來自不同的機器。這樣,連線就可以在多個 PostgreSQL 伺服器之間進行負載均衡。
隨機負載均衡,由於其隨機性,幾乎不可能完全均勻分佈,但在統計上非常接近。這裡一個重要的方面是,該演算法使用兩個級別的隨機選擇:首先,主機將按隨機順序解析。然後,在解析下一個主機之前,當前主機的所有已解析地址將按隨機順序嘗試。在某些情況下,此行為可能會大大偏離每個節點的連線數,例如當某些主機解析到比其他主機更多的地址時。但是,這種偏斜也可以被有意使用,例如,透過在主機字串中多次提供較大伺服器的主機名來增加其獲得的連線數。
使用此值時,建議也為 connect_timeout 配置合理的值。因為那樣,如果用於負載均衡的節點之一無響應,將嘗試一個新節點。
oauth_issuer
#當伺服器請求連線的 OAuth 令牌時,要聯絡的可信發行者的 HTTPS URL。所有 OAuth 連線都需要此引數;它必須與 伺服器的 HBA 配置中的 issuer
設定完全匹配。
作為標準身份驗證握手的一部分,libpq 將向伺服器請求一個“發現文件”:一個提供一組 OAuth 配置引數的 URL。伺服器必須提供一個直接從 oauth_issuer
的元件構建的 URL,並且此值必須與發現文件本身中宣告的發行者識別符號完全匹配,否則連線將失敗。這是為了防止一類針對 OAuth 客戶端的“混合攻擊”(mix-up attacks)。
您也可以顯式地將 oauth_issuer
設定為用於 OAuth 發現的 /.well-known/
URI。在這種情況下,如果伺服器請求不同的 URL,連線將失敗,但自定義 OAuth 流程(custom OAuth flow)可能能夠透過使用先前快取的令牌來加快標準握手速度。(在這種情況下,建議同時設定 oauth_scope,因為客戶端將沒有機會向伺服器請求正確的範圍設定,並且令牌的預設範圍可能不足以進行連線。) libpq 當前支援以下已知端點:
/.well-known/openid-configuration
/.well-known/oauth-authorization-server
發行者在 OAuth 連線握手中擁有高度特權。經驗法則是,如果您不信任 URL 的操作員來處理對您伺服器的訪問,或者直接冒充您,那麼該 URL 不應被信任為 oauth_issuer
。
oauth_client_id
#由授權伺服器頒發的 OAuth 2.0 客戶端識別符號。如果 PostgreSQL 伺服器 請求連線的 OAuth 令牌(並且沒有安裝自定義 OAuth 掛鉤來提供一個),則必須設定此引數;否則,連線將失敗。
oauth_client_secret
#聯絡 OAuth 授權伺服器時使用的客戶端密碼(如果有)。此引數是否必需由 OAuth 提供商決定;“公共”客戶端通常不使用密碼,而“機密”客戶端通常使用。
oauth_scope
#傳送到授權伺服器的訪問請求的範圍,指定為一個(可能為空的)空格分隔的 OAuth 範圍識別符號列表。此引數是可選的,用於高階用法。
通常,客戶端將從 PostgreSQL 伺服器獲取適當的範圍設定。如果使用此引數,則會忽略伺服器請求的範圍列表。這可以防止不太受信任的伺服器向終端使用者請求不當的訪問範圍。但是,如果客戶端的範圍設定不包含伺服器所需的範圍,伺服器很可能會拒絕頒發的令牌,並且連線將失敗。
空範圍列表的含義取決於提供商。OAuth 授權伺服器可以選擇頒發帶有“預設範圍”(無論它是什麼)的令牌,或者完全拒絕令牌請求。
如果您在文件中看到任何不正確、與您實際經驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。