PostgreSQL保持由Go建立的连接处于打开状态

PostgreSQL保持由Go建立的连接处于打开状态,postgresql,go,database-connection,Postgresql,Go,Database Connection,使用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() f

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


我做错了什么?

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

谢谢,很高兴知道这一点,但这可以调整吗?我将最大连接数设置为100,很快就不可能再建立新连接了。我知道我可以做
db.SetMaxOpenConns(n)
有3种方法可以调整连接池:,这非常有用,谢谢。我可能会在2到3天内接受。如文档所述,这将关闭行迭代器,而不是数据库连接。