Goroutine在每个请求(sqlx)和ticker之后打开一个到数据库的新连接



让我们考虑以下goroutine:

func main(){
...
go dbGoRoutine()
...
}

以及函数:

func dbGoRoutine() {
db, err := sqlx.Connect("postgres", GetPSQLInfo())
if err != nil {
panic(err)
}
defer db.Close()
ticker := time.NewTicker(10 * time.Second)
for _ = range ticker.C {
_, err := db.Queryx("SELECT * FROM table")
if err != nil {
// handle
}
}
}

每次函数在ticker上迭代时,它都会打开一个cloudSQL连接

[service... cloudsql-proxy] 2019/11/08 17:05:05 New connection for "location:exemple-db"

我不明白为什么它每次都打开一个新的连接,因为sqlx。Connect不在for循环中。

这个问题是由于sql包中的Query函数,它返回的Row是:

Rows是查询的结果。其光标在结果集的第一行之前开始。

这些游标是使用缓存存储的。

请尝试使用Exec((。

相关内容

  • 没有找到相关文章

最新更新