第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何安全地丟棄 golang 數(shù)據(jù)庫/sql 池連接,例如當(dāng)它們指向只讀副本時?

如何安全地丟棄 golang 數(shù)據(jù)庫/sql 池連接,例如當(dāng)它們指向只讀副本時?

Go
胡子哥哥 2023-03-21 15:07:15
我們一直在使用 golangdatabase/sql和github.com/lib/pqPostgreSQL 集群,這意味著作為復(fù)制主服務(wù)器的某個數(shù)據(jù)庫服務(wù)器在先前的主服務(wù)器發(fā)生故障后可能是只讀副本。最近,我們的低使用率服務(wù)設(shè)法在其連接池中保留一個連接(沒有會打開第二個連接的并發(fā)請求),并且其目標(biāo)已降級為只讀副本。結(jié)果,對服務(wù)的每個寫入操作都失敗,直到它重新啟動。如果與集群建立了新連接,就不會發(fā)生這種情況。問題是我找不到記錄在案的方法來丟棄某些類型錯誤的連接。唯一database/sql聽起來正確的公共方法是Conn.Close將連接返回到池而不關(guān)閉它。不調(diào)用它會導(dǎo)致資源泄漏,最終使池?zé)o法使用。有沒有一種可持續(xù)的方法可以在應(yīng)用程序需要時擺脫連接?
查看完整描述

3 回答

?
紫衣仙女

TA貢獻(xiàn)1839條經(jīng)驗 獲得超15個贊

我相信在使用 時database/sql,答案是“否”,盡管我很樂意得到糾正。

不久前,出于類似的原因(無法控制低級別的連接),我們從database/sqlwith切換lib/pq到純 Go jackc/pgx ,并對結(jié)果感到滿意。該模塊提供了ConnPool.Reset聽起來像你在這里想要的東西:

Reset 關(guān)閉所有打開的連接,但讓池保持打開狀態(tài)。它旨在用于檢測到會中斷所有連接的錯誤(例如網(wǎng)絡(luò)中斷或服務(wù)器狀態(tài)更改)。

在簽出連接時重置池是安全的。這些連接將在返回池時關(guān)閉。


查看完整回答
反對 回復(fù) 2023-03-21
?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊

最好的選擇可能是 Postgres 的DISCONNECT命令。

_, err := conn.ExecContext(context.Background(), "DISCONNECT")

將導(dǎo)致連接從服務(wù)器端關(guān)閉。


查看完整回答
反對 回復(fù) 2023-03-21
?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗 獲得超2個贊

我認(rèn)為您可以通過使用 Raw 函數(shù)并返回 driver.ErrBadConn 錯誤來丟棄它:

conn.Raw(func(interface{}) error { return driver.ErrBadConn })


查看完整回答
反對 回復(fù) 2023-03-21
  • 3 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號