加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 如何安全地丢弃golang数据库/ sql池连接,例如当它

发布时间:2020-12-13 16:01:00 所属栏目:百科 来源:网络整理
导读:我们一直在使用golang的数据库/ sql和 github.com/lib/pq与PostgreSQL集群,这意味着作为复制主机的某个数据库服务器可能是在前一个主机发生故障后的只读副本. 最近,我们的低使用率服务设法在其连接池中保留单个连接(没有可以打开第二个连接的并发请求),并且
我们一直在使用golang的数据库/ sql和 github.com/lib/pq与PostgreSQL集群,这意味着作为复制主机的某个数据库服务器可能是在前一个主机发生故障后的只读副本.

最近,我们的低使用率服务设法在其连接池中保留单个连接(没有可以打开第二个连接的并发请求),并且其目标已降级为只读副本.因此,对服务的每个写入操作都会失败,直到重新启动为止.如果与群集建立了新连接,那就不会发生这种情况.

问题是我找不到记录的方法来丢弃某些类型的错误的连接.数据库/ sql中唯一听起来正确的公共方法是Conn.Close,它返回到池的连接而不关闭它.不调用它会导致资源泄漏,最终导致池无法使用.在应用程序想要时,是否有可持续的方法来摆脱连接?

解决方法

我相信在使用 database / sql时,答案是“不”,尽管我很乐意纠正.

前段时间,我们从lib / pq的数据库/ sq切换到纯Go jackc/pgx,原因类似(无法控制低级别的连接),并对结果感到满意.该模块提供ConnPool.Reset,听起来像你想要的:

Reset closes all open connections,but leaves the pool open. It is intended for use when an error is detected that would disrupt all connections (such as a network interruption or a server state change).

It is safe to reset a pool while connections are checked out. Those connections will be closed when they are returned to the pool.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读