Go 中行插入的可重複使用Postgres 資料庫連接:解決連接池耗盡
目標是使用單一可重複使用Postgres 資料庫連接Go 中的行插入。該錯誤是由於連接處理不當導致程式碼無意中打開多個連接而引起的。
Postgres 的連線池機制 sql.DB 維護的是連線快取而不是單一連線。它根據需要動態分配連接,最高可達 Postgres 伺服器的最大連接限制。但是,當使用 QueryRow 時,如果不對傳回的 Row 值呼叫 Scan,則無法正確釋放連線。
內部保存 Rows 實例的 Row 物件管理自己的連線。只有在呼叫 Scan 時,連線才會自動釋放。忽略呼叫 Scan 會保持連線被佔用,從而迫使 DB 在後續 QueryRow 呼叫中開啟新連線。由於在沒有釋放連接的情況下發生這種情況,池會耗盡,問題就會出現。
要解決此問題,您可以採用以下任一方法:
這是包含這些變更的修訂後的程式碼片段:
// ... func main() { // ... // msg handling sqlStatement := ` INSERT INTO heartbeat ("Legend", "Status", "TimeStamp") VALUES (, , ) ` row := db.QueryRow(sqlStatement, Legend, Status, TimeStamp) row.Scan(&dummy) // dummy variable to discard the result // ... } // ...
這可確保連線及時釋放,防止資料庫連線池耗盡。
以上是在 Go 中插入行時如何避免 Postgres 連接池耗盡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!