为了账号安全,请及时绑定邮箱和手机立即绑定

PostgreSQL 保持 Go 建立的连接打开

PostgreSQL 保持 Go 建立的连接打开

Go
慕森王 2023-07-31 15:58:11
使用 Go cron 包,我每秒运行以下代码:func dbPGConnectionCount(db *sql.DB) (int64, error) {    var connectionCount int64    rows, err := db.Query(`SELECT count(1) from pg_stat_activity;`)    if err != nil {        return 0, err    }    defer rows.Close()    for rows.Next() {        err = rows.Scan(&connectionCount)        if err != nil {            return 0, err        }    }    return connectionCount, err}其中db是用于连接到 PostgreSQL 的连接池。感谢这个defer声明,我预计 PostgreSQL 不会保持任何连接打开。然而,在启动我的程序后不久,当我检查时,select * from pg_stat_activity我看到每秒都会添加新的空闲查询。我究竟做错了什么?
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

你没有做错任何事。这就是连接池的工作原理。您defer将连接释放回池。它有意保持打开状态,以便下次需要数据库时,您的应用程序不必等待新的连接握手,它可以重新使用现有的连接。这几乎就是连接池的定义。



查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信