14中連接參數(shù)target_session_attrs增強
PostgreSQL 14中連接參數(shù)target_session_attrs增強
本文討論PostgreSQL 14數(shù)據(jù)庫連接參數(shù)target_session_attrs增強的功能,并解釋該功能背后的歷史、如何使用它以及它提供的各種好處。
背景
很多PG客戶端程序使用C客戶端libpq庫訪問數(shù)據(jù)庫。libpq提供了一系列函數(shù),允許連接PG后臺服務(wù)并將查詢傳送過去,同時還可以接收查詢返回的結(jié)果。
通過libpq,PG支持一個連接字符串,指定多個host+port。依次嘗試每個host+port直到成功建立連接。
PG10中引入指定多個hosts的功能。同時增加了參數(shù)target_session_attrs,允許指定連接的后臺server類型。
支持下面的參數(shù)值:
從PG11開始,F(xiàn)ujitsu提供了額外的參數(shù)值,不僅要滿足其他連接類型,還要提高內(nèi)部效率,以驗證參數(shù)并建立連接。因此與PG社區(qū)開始了漫長的審查、咨詢、改進的過程。涉及:
多名開發(fā)人員;許多補丁版本和補丁集更改;社區(qū)許多成員的反饋,有時會有不同意見和想法;一些成員對附加功能的請求;提交者本人的最終改進、調(diào)整與簡化。
最終libpq增強功能在PG14提交了。
功能概述
PG14中target_session_attrs值如下,高亮顯示的是新值:
注意,由于default_transaction_read_only設(shè)置成on,PG的server可以是只讀但不能是hot standby模式。
支持的客戶端
任何使用libpq庫的客戶端都能夠使用target_session_attrs以及此處描述的改進的功能。支持psycopg2(python驅(qū)動)、psqlODBC(c 語言接口的驅(qū)動)。但是不包括JDBC驅(qū)動和NpgSql。JDBC支持targetServerType提供類似的功能,允許的值有primary/secondary/preferSecondary。NpgSql目前沒有類似功能。
連接性能的提升
target_session_attrs增加了新值,當(dāng)連接到PG14或之后的版本時,性能會有所提升。通過使用與會話狀態(tài)相關(guān)的配置變量來實現(xiàn):
服務(wù)器在成功連接時直接向客戶端報告這些信息,節(jié)省了額外的網(wǎng)絡(luò)往返時間以確定會話狀態(tài)。因此連接到舊版本服務(wù)時,會發(fā)出SHOW和SELECT查詢以檢測會話只讀或熱備狀態(tài)。注意,若服務(wù)在會話期間被提升成主,則in_hot_standby也會報告給客戶端。
案例
Psql使用libpq,可以無需任何編碼測試target_session_attrs。下面顯示了嘗試連接2個可能的本地服務(wù)其中一個服務(wù)時,使用不同target_session_attrs值的簡單例子。
1、創(chuàng)建本地服務(wù)實例testdb1和testdb2(分別運行在端庫5432和5433)
$ pg_ctl -D ./testdb1 initdb
$ pg_ctl -D ./testdb2 initdb
$ pg_ctl -D ./testdb1 -o '-p 5432' -l testdb_1.log start
$ pg_ctl -D ./testdb2 -o '-p 5433' -l testdb_2.log start
2、嘗試連接僅接受只讀事務(wù)的服務(wù)
$ psql "host=localhost,localhost port=5432,5433 dbname=postgres target_session_attrs=read-only"
psql: error: connection to server at "localhost" (::1), port 5432 failed: session is not read-only
connection to server at "localhost" (::1), port 5433 failed: session is not read-only
連接失敗,因為2個實例僅接受讀寫事務(wù)。
3、改變testdb2使其僅接受只讀事務(wù),更改testdb2/postgresql.conf添加default_transaction_read_only=on并重啟。
$ pg_ctl -D ./testdb2 -o '-p 5433' -l testdb_2.log restart
4、嘗試連接到只讀server
$ psql "host=localhost,localhost port=5432,5433 dbname=postgres target_session_attrs=read-only"
psql (14devel)
Type "help" for help.
postgres=# show
port;
port
------
5433
(1 row)
5、嘗試連接hot standby的server
$ psql "host=localhost,localhost port=5432,5433 dbname=postgres target_session_attrs=standby"
psql: error: connection to server at "localhost" (::1), port 5432 failed: server is not in hot standby mode
connection to server at "localhost" (::1), port 5433 failed: server is not in hot standby mode
連接失敗,因為沒有hot standby模式的實例
6、嘗試連接primary server
$ psql "host=localhost,localhost port=5432,5433 dbname=postgres target_session_attrs=primary"
psql (14devel)
Type "help" for help.
postgres=# show
port;
port
------
5432
(1 row)
7、連接到一個server,最好是處于熱備模式的
$ psql "host=localhost,localhost port=5432,5433 dbname=postgres target_session_attrs=prefer-standby"
psql (14devel)
Type "help" for help.
postgres=# show
port;
port
------
5432
(1 row)
總結(jié)
支持的target_session_attrs新值,允許客戶端選擇需要的目標(biāo)服務(wù)連接時進行更精細的粒度,并協(xié)助多主機連接功能。還提供了一種基本的擴展形式,例如允許將只讀請求重定向到備服務(wù),以減少主服務(wù)的負載。最后新值可以允許多主機連接字符串更好地與某些故障切換解決方案一起公眾,以重新連接到可用的服務(wù)。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-10.29立即報名>> 2024德州儀器嵌入式技術(shù)創(chuàng)新發(fā)展研討會
-
10月31日立即下載>> 【限時免費下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月14日立即報名>> 2024工程師系列—工業(yè)電子技術(shù)在線會議
-
12月19日立即報名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報名中>> OFweek2024中國智造CIO在線峰會
推薦專題
- 1 Intel宣布40年來最重大轉(zhuǎn)型:年底前裁員15000人、拋掉2/3房產(chǎn)
- 2 因美封殺TikTok,字節(jié)股價骨折!估值僅Meta1/5
- 3 宏山激光重磅發(fā)布行業(yè)解決方案,助力智能制造產(chǎn)業(yè)新飛躍
- 4 國產(chǎn)AI芯片公司破產(chǎn)!白菜價拍賣
- 5 具身智能火了,但規(guī)模落地還需時間
- 6 國產(chǎn)英偉達們,抓緊沖刺A股
- 7 三次錯失風(fēng)口!OpenAI前員工殺回AI編程賽道,老東家捧金相助
- 8 英特爾賦能智慧醫(yī)療,共創(chuàng)數(shù)字化未來
- 9 英偉達的麻煩在后頭?
- 10 將“網(wǎng)紅”變成“商品”,AI“爆改”實力拉滿
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市