PostgreSQL 保持 Go 建立的连接打开

使用 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我看到每秒都会添加新的空闲查询。


我究竟做错了什么?


慕森王
浏览 73回答 1
1回答

慕尼黑的夜晚无繁华

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

相关分类

Go