gpt4 book ai didi

database - golang 数据库/sql 中的死锁

转载 作者:IT王子 更新时间:2023-10-29 02:23:09 26 4
gpt4 key购买 nike

我注意到 Go 的 database/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()

这正常吗?每次我想使用事务时都应该创建一个新的数据库连接吗?

最佳答案

connection.Query 函数不会在与 tx.XXX 函数相同的 session 中执行,因此如果 select_statement 碰巧引用了 insert_statement 写入的任何内容,您可能会阻塞。

试试 tx.Query(select_statement) 看看那个是否阻塞。

关于database - golang 数据库/sql 中的死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com