【发布时间】:2016-06-11 23:20:21
【问题描述】:
我注意到 Go 的 database/sql 包中有一个奇怪的行为,使用的是 lib/pq 中的 PostgreSQL 驱动程序。基本上,如果我在同一连接上构建事务时使用数据库连接进行查询,我会进入死锁并且程序阻塞(我需要手动重新启动数据库服务器以使其再次工作)。在下面的示例代码中,我会卡在 select 语句中,并且永远不会执行第二个 insert 语句(而如果我删除查询,代码将正常执行)。
tx, _ := connection.Begin()
tx.Exec(insert_statement)
rows, _ := connection.Query(select_statement)
rows.Close()
tx.Exec(insert_statement_2)
tx.Commit()
这正常吗?每次我想使用事务时都应该创建一个新的数据库连接吗?
【问题讨论】: