使用 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
将连接释放回池。它有意保持打开状态,以便下次需要数据库时,您的应用程序不必等待新的连接握手,它可以重新使用现有的连接。这几乎就是连接池的定义。
- 1 回答
- 0 关注
- 72 浏览
添加回答
举报
0/150
提交
取消