我有一个被锁定的查询。因此,我的 Web 应用程序被锁定,我真的不明白为什么。
看着 PgAdmin 我有这个:
如果我理解正确,橙色查询已被上面的查询(处于“空闲事务”状态)阻止。
这是否意味着“事务中的空闲”事务未提交?是不是因为没有提交另一个事务被锁定?
如果我提交“idle in transaction”事务,它会解锁锁定的事务吗?
老实说,我真的不明白我应该如何解释这一点。你能帮助我吗 ?
我有一个被锁定的查询。因此,我的 Web 应用程序被锁定,我真的不明白为什么。
看着 PgAdmin 我有这个:
如果我理解正确,橙色查询已被上面的查询(处于“空闲事务”状态)阻止。
这是否意味着“事务中的空闲”事务未提交?是不是因为没有提交另一个事务被锁定?
如果我提交“idle in transaction”事务,它会解锁锁定的事务吗?
老实说,我真的不明白我应该如何解释这一点。你能帮助我吗 ?
你的假设是正确的。“事务中的空闲”表示会话(在本例中为 PID=16686)启动了事务并在goodscontract
表上持有一些锁。
请注意,您看到的 PID=16686 的选择很可能不是阻止更新的语句(写入者不会被 Postgres 中的读取者阻止)。很可能 PID=16686 之前运行了一条不同的语句来获取锁(或者选择包含一个for update
子句 - 因为您的屏幕截图没有显示完整的语句,这是不可能的)。
一般来说,强烈建议尽快结束事务(使用commit
or ) - 其中包括只执行s 的rollback
只读事务。select
有两件事需要在 postgresql.conf 上更新
idle_transaction_timeout
共享内存
将解决问题。