14中連接參數(shù)target_session_attrs增強(qiáng)
PostgreSQL 14中連接參數(shù)target_session_attrs增強(qiáng)
本文討論P(yáng)ostgreSQL 14數(shù)據(jù)庫連接參數(shù)target_session_attrs增強(qiáng)的功能,并解釋該功能背后的歷史、如何使用它以及它提供的各種好處。
背景
很多PG客戶端程序使用C客戶端libpq庫訪問數(shù)據(jù)庫。libpq提供了一系列函數(shù),允許連接PG后臺(tái)服務(wù)并將查詢傳送過去,同時(shí)還可以接收查詢返回的結(jié)果。
通過libpq,PG支持一個(gè)連接字符串,指定多個(gè)host+port。依次嘗試每個(gè)host+port直到成功建立連接。
PG10中引入指定多個(gè)hosts的功能。同時(shí)增加了參數(shù)target_session_attrs,允許指定連接的后臺(tái)server類型。
支持下面的參數(shù)值:

從PG11開始,F(xiàn)ujitsu提供了額外的參數(shù)值,不僅要滿足其他連接類型,還要提高內(nèi)部效率,以驗(yàn)證參數(shù)并建立連接。因此與PG社區(qū)開始了漫長的審查、咨詢、改進(jìn)的過程。涉及:
多名開發(fā)人員;許多補(bǔ)丁版本和補(bǔ)丁集更改;社區(qū)許多成員的反饋,有時(shí)會(huì)有不同意見和想法;一些成員對(duì)附加功能的請(qǐng)求;提交者本人的最終改進(jìn)、調(diào)整與簡化。
最終libpq增強(qiáng)功能在PG14提交了。
功能概述
PG14中target_session_attrs值如下,高亮顯示的是新值:

注意,由于default_transaction_read_only設(shè)置成on,PG的server可以是只讀但不能是hot standby模式。
支持的客戶端
任何使用libpq庫的客戶端都能夠使用target_session_attrs以及此處描述的改進(jìn)的功能。支持psycopg2(python驅(qū)動(dòng))、psqlODBC(c 語言接口的驅(qū)動(dòng))。但是不包括JDBC驅(qū)動(dòng)和NpgSql。JDBC支持targetServerType提供類似的功能,允許的值有primary/secondary/preferSecondary。NpgSql目前沒有類似功能。
連接性能的提升
target_session_attrs增加了新值,當(dāng)連接到PG14或之后的版本時(shí),性能會(huì)有所提升。通過使用與會(huì)話狀態(tài)相關(guān)的配置變量來實(shí)現(xiàn):

服務(wù)器在成功連接時(shí)直接向客戶端報(bào)告這些信息,節(jié)省了額外的網(wǎng)絡(luò)往返時(shí)間以確定會(huì)話狀態(tài)。因此連接到舊版本服務(wù)時(shí),會(huì)發(fā)出SHOW和SELECT查詢以檢測會(huì)話只讀或熱備狀態(tài)。注意,若服務(wù)在會(huì)話期間被提升成主,則in_h(yuǎn)ot_standby也會(huì)報(bào)告給客戶端。
案例
Psql使用libpq,可以無需任何編碼測試target_session_attrs。下面顯示了嘗試連接2個(gè)可能的本地服務(wù)其中一個(gè)服務(wù)時(shí),使用不同target_session_attrs值的簡單例子。
1、創(chuàng)建本地服務(wù)實(shí)例testdb1和testdb2(分別運(yùn)行在端庫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
連接失敗,因?yàn)?個(gè)實(shí)例僅接受讀寫事務(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
連接失敗,因?yàn)闆]有hot standby模式的實(shí)例
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、連接到一個(gè)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ù)連接時(shí)進(jìn)行更精細(xì)的粒度,并協(xié)助多主機(jī)連接功能。還提供了一種基本的擴(kuò)展形式,例如允許將只讀請(qǐng)求重定向到備服務(wù),以減少主服務(wù)的負(fù)載。最后新值可以允許多主機(jī)連接字符串更好地與某些故障切換解決方案一起公眾,以重新連接到可用的服務(wù)。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長度6~500個(gè)字
圖片新聞
-

OpenAI發(fā)布的AI瀏覽器,市場為何反應(yīng)強(qiáng)烈?
-

馬云重返一線督戰(zhàn),阿里重啟創(chuàng)始人模式
-

機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-

存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬
-

長安汽車母公司突然更名:從“中國長安”到“辰致科技”
-

豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-

字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-

員工持股爆雷?廣汽埃安緊急回應(yīng)
最新活動(dòng)更多
-
11月7日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月20日立即報(bào)名>> 【免費(fèi)下載】RISC-V芯片發(fā)展現(xiàn)狀與測試挑戰(zhàn)-白皮書
-
即日-11.25立即下載>>> 費(fèi)斯托白皮書《柔性:汽車生產(chǎn)未來的關(guān)鍵》
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
11月28日立即下載>> 【白皮書】精準(zhǔn)洞察 無線掌控——283FC智能自檢萬用表
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 特斯拉工人被故障機(jī)器人打成重傷,索賠3.6億
- 2 AI 時(shí)代,阿里云想當(dāng)“安卓” ,那誰是“蘋果”?
- 3 拐點(diǎn)已至!匯川領(lǐng)跑工控、埃斯頓份額第一、新時(shí)達(dá)海爾賦能扭虧為盈
- 4 L3自動(dòng)駕駛延期,逼出車企技術(shù)自我淘汰
- 5 隱退4年后,張一鳴久違現(xiàn)身!互聯(lián)網(wǎng)大佬正集體殺回
- 6 機(jī)器人9月大事件|3家國產(chǎn)機(jī)器人沖刺IPO,行業(yè)交付與融資再創(chuàng)新高!
- 7 谷歌“香蕉”爆火啟示:國產(chǎn)垂類AI的危機(jī)還是轉(zhuǎn)機(jī)?
- 8 7倍機(jī)器人大牛股:高管股東套現(xiàn)VS機(jī)構(gòu)兇猛抱團(tuán),該信誰?
- 9 八部門聯(lián)手放行L3自動(dòng)駕駛!巨頭開始拼搶萬億市場?
- 10 OpenAI發(fā)布的AI瀏覽器,市場為何反應(yīng)強(qiáng)烈?


分享





