闲置事务并使用PostgreSQL锁定

时间:2013-11-02 14:00:31

标签: sql postgresql transactions

我有一个被锁定的查询。因此我的网络应用程序被锁定,我不明白为什么。

看着PgAdmin我有这个:

Activities

如果我理解正确,橙色查询已被上面的查询阻止(处于“处于事务处理中的空闲状态”)。

这是否意味着“交易中的空闲”交易没有提交? 是不是因为未承诺其他交易被锁定?

如果我提交“交易中空闲”交易,它会解锁锁定的交易吗?

说实话,我真的不明白我应该如何理解这一点。你能救我吗?

1 个答案:

答案 0 :(得分:1)

你的假设是正确的。 “在事务中空闲”意味着会话(在这种情况下PID = 16686)启动了一个事务,并在goodscontract表上持有一些锁。

请注意,您在PID = 16686中看到的选项很可能不是阻止更新的语句(编写器未被Postgres中的读者阻止)。很可能PID = 16686先前运行了另一个获取锁定的语句(或者select包含for update子句 - 因为截图没有显示完整的语句,这是不可能的。)

通常,强烈建议尽快结束交易(使用commitrollback) - 其中包括只执行select s的只读交易。