2013-11-02 30 views
1

我有一个锁定的查询。因此我的Web应用程序被锁定,我不明白为什么。闲置事务并使用PostgreSQL锁定

望着pgAdmin的我有这样的:

Activities

如果我理解正确的,橙色的查询已被封锁由查询正上方(这是在“在交易闲置”状态)。

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

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

说实话,我真的不明白我应该如何解释这一点。你可以帮我吗 ?

回答

1

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

请注意,您看到的PID = 16686的选择很可能不是阻止更新的语句(作者不会被Postgres中的读者阻止)。很有可能PID = 16686之前运行了一个不同的声明,该声明获取了锁(或者该选择包含一个for update子句 - 因为您的屏幕截图没有显示完整的声明,这是无法说明的)。

一般强烈建议尽快结束交易(使用commitrollback) - 其中包括只有select s的只读交易。

+0

谢谢你的回答。其实我正在使用Play Framwork(使用Hibernate)。据我所知,播放框架在HTTP请求开始时打开一个事务,并在最后提交它。但在我的情况下,被阻止的事务是我手动打开的无状态事务。另外,您在闲置交易中的权利是在商品合同表上有更新请求。所有这些意味着我应该在打开无状态事务之前手动处理事务以提交它们? –