我有一个被锁定的查询。因此我的网络应用程序被锁定,我不明白为什么。
看着PgAdmin我有这个:
如果我理解正确,橙色查询已被上面的查询阻止(处于“处于事务处理中的空闲状态”)。
这是否意味着“交易中的空闲”交易没有提交? 是不是因为未承诺其他交易被锁定?
如果我提交“交易中空闲”交易,它会解锁锁定的交易吗?
说实话,我真的不明白我应该如何理解这一点。你能救我吗?
答案 0 :(得分:1)
你的假设是正确的。 “在事务中空闲”意味着会话(在这种情况下PID = 16686)启动了一个事务,并在goodscontract
表上持有一些锁。
请注意,您在PID = 16686中看到的选项很可能不是阻止更新的语句(编写器未被Postgres中的读者阻止)。很可能PID = 16686先前运行了另一个获取锁定的语句(或者select包含for update
子句 - 因为截图没有显示完整的语句,这是不可能的。)
通常,强烈建议尽快结束交易(使用commit
或rollback
) - 其中包括只执行select
s的只读交易。