var db *pgx.Conn /database
func ConnectCockroachDB() {
var dbUri string = "testurl"
conn, err := pgx.Connect(context.background(), dbUri)
if err != nil {
fmt.Fprintf(os.Stderr, "Unable to connect to database: %v
", err)
os.Exit(1)
}
db = conn
}
//回傳一個DB物件的句柄。
func GetDB() *pgx.Conn {
if db == nil {
ConnectCockroachDB()
}
return db
}
但是在我重啟DB之后,應用程式不能自動連接。錯誤是 "conn closed"。我需要重啟應用程式以使應用程式正常作業
uj5u.com熱心網友回復:回答你的問題:
func GetDB() *pgx。 Conn {
if db == nil || db.IsClosed() {
ConnectCockroachDB()
}
return db
}
然而,這段代碼對于從多個goroutine中使用是不安全的。應該有一個鎖來訪問和更新全域的db實體,以避免競賽條件。
uj5u.com熱心網友回復:
既然你在使用pgx,你可能想嘗試使用pgxpool來連接。https://pkg.go.dev/github.com/jackc/pgx/v4/pgxpool
如果舊的連接被關閉,它將自動負責創建一個新的連接。它也已經支持并發使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/313779.html
標籤:
