【发布时间】:2016-07-20 06:43:17
【问题描述】:
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
"sync"
)
func main() {
db, _ := sql.Open("postgres", fmt.Sprintf("host=%s dbname=%s user=%s sslmode=disable", "localhost", "dbname", "postgres"))
defer db.Close()
db.SetMaxOpenConns(15)
var wg sync.WaitGroup
for i := 0; i < 15; i++ {
wg.Add(1)
go func() {
defer wg.Done()
//#1
rows, _ := db.Query("SELECT * FROM reviews LIMIT 1")
for rows.Next() {
//#2
db.Exec("SELECT * FROM reviews LIMIT 1")
}
}()
}
wg.Wait()
}
查询 #1 打开 15 个连接,当执行 rows.Next() 时它们将被关闭。但是rows.Next() 永远不会被执行,因为它包含等待空闲连接的db.Exec()。
如何解决这个问题?
【问题讨论】:
-
您是否尝试过在单独的 goroutine 中启动
Exec?例如go db.Exec("SELECT * FROM reviews LIMIT 1")?
标签: postgresql go goroutine