3 回答

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
我相信在使用 時(shí)database/sql
,答案是“否”,盡管我很樂意得到糾正。
不久前,出于類似的原因(無法控制低級(jí)別的連接),我們從database/sql
with切換lib/pq
到純 Go jackc/pgx ,并對(duì)結(jié)果感到滿意。該模塊提供了ConnPool.Reset
聽起來像你在這里想要的東西:
Reset 關(guān)閉所有打開的連接,但讓池保持打開狀態(tài)。它旨在用于檢測(cè)到會(huì)中斷所有連接的錯(cuò)誤(例如網(wǎng)絡(luò)中斷或服務(wù)器狀態(tài)更改)。
在簽出連接時(shí)重置池是安全的。這些連接將在返回池時(shí)關(guān)閉。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
最好的選擇可能是 Postgres 的DISCONNECT命令。
_, err := conn.ExecContext(context.Background(), "DISCONNECT")
將導(dǎo)致連接從服務(wù)器端關(guān)閉。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
我認(rèn)為您可以通過使用 Raw 函數(shù)并返回 driver.ErrBadConn 錯(cuò)誤來丟棄它:
conn.Raw(func(interface{}) error { return driver.ErrBadConn })
- 3 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報(bào)