我正在尋找一些關于 Npgsql 中的連接和連接池如何轉化為 PostgreSQL 的“會話”概念的具體資訊。具體來說:
- 是
NpgsqlConnection.Open創建新會話的同義詞嗎? - 假設上述情況屬實,當啟用連接池并重用連接時,這是否也總是如此?
- 池連接之間是否存在基于會話的配置(
set_config/ )“泄漏”的風險?current_setting
對于背景關系,我想使用基于會話的設定來強制執行多租戶 RLS 策略,但我想排除連接池在極端情況下導致泄漏的可能性。
謝謝。
uj5u.com熱心網友回復:
有關一些背景資訊,請參閱https://stackoverflow.com/a/44272654/640325。
當啟用 Npgsql 池時(默認) NpgsqlConnection.Open 絕對不是創建新會話(或到 PG 的物理連接)的同義詞 - 可能會從 Npgsql 的池中取出連接并回傳,這要快得多。當池關閉時,Open 確實是創建新 PG 會話的同義詞。
但是,即使池化已打開,Npgsql 也會在連接狀態回傳池時(通過DISCARD ALL)重置連接狀態。效果是在 NpgsqlConnection.Open 之后,您的連接狀態應該與打開一個全新的 PG 會話時的狀態相同(即如果池關閉)。這意味著即使啟用了池,也不會發生狀態泄漏。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/492797.html
標籤:PostgreSQL npgsql
上一篇:如何回圈遍歷一行中的列
下一篇:postgres中多行的第一列值
