Dead Lock in golang database/sql



我注意到Go的数据库/sql包中使用lib/pq的PostgreSQL驱动程序时存在奇怪的行为。基本上,如果我在同一连接上构建事务时使用数据库连接进行查询,我会输入死锁和程序块(我需要手动重新启动数据库服务器以使其再次工作)。在下面的示例代码中,我会卡在 select 语句上,并且第二个插入语句永远不会执行(而如果我删除查询,代码将正常执行)。

tx, _ := connection.Begin()
tx.Exec(insert_statement)
rows, _ := connection.Query(select_statement)
rows.Close()
tx.Exec(insert_statement_2)
tx.Commit()

这正常吗?我是否应该在每次要使用事务时创建新的数据库连接?

连接。查询函数不会在与 tx.XXX 函数相同的会话上执行,因此,如果select_statement碰巧引用了insert_statement写入的任何内容,则可能会阻止。

试试德克萨斯州。查询(select_statement)以查看该是否阻止。

最新更新