在 Go 中插入行时如何避免 Postgres 连接池耗尽?
Go 中行插入的可重用 Postgres 数据库连接:解决连接池耗尽
目标是使用单个可重用 Postgres 数据库连接用于 Go 中的行插入。该错误是由于连接处理不当导致代码无意中打开多个连接而引起的。
Postgres 的连接池机制 sql.DB 维护的是连接缓存而不是单个连接。它根据需要动态分配连接,最高可达 Postgres 服务器的最大连接限制。但是,当使用 QueryRow 时,如果不对返回的 Row 值调用 Scan,则无法正确释放连接。
内部保存 Rows 实例的 Row 对象管理其自己的连接。仅当调用 Scan 时,连接才会自动释放。忽略调用 Scan 会保持连接被占用,从而迫使 DB 在后续 QueryRow 调用中打开新连接。由于在没有释放连接的情况下发生这种情况,池会耗尽,问题就会出现。
要解决此问题,您可以采用以下任一方法:
- 如果结果是,则使用 Exec查询无关紧要。
- 在返回的 *Row 上调用 Scan 以释放
这是包含这些更改的修订后的代码片段:
// ... 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中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)