PostgreSQL 9.3在事务中空闲

时间:2019-10-11 09:03:26

标签: postgresql jdbc sqltransaction

在我们的产品中,有时会出现通过idle in transaction连接锁定数据库的情况。

我正在使用postgresql-9.3(9.4),通过jdbc驱动程序进行java连接。
所有连接均设置为自动提交。

只能使用SELECT pg_terminate_backend(PID)解决问题。我不喜欢这样的决定,但是唯一有效的方法就是重启服务。

因此,当我不手动操作事务时,如何解决此类问题就成为一个问题。与Postgres的所有连接都是本地连接,所以我不认为这是网络问题。

更新 毫无疑问,这是一个应用程序错误。

想象一下,我们有一个查询:

try(PreparedStatement statement=connection.prepareStatement("update table1 set some_field=1 where id=2")){
    statement.executeUpdate();
}

因此是用于本地连接的简单查询。连接处于活动状态。自动提交是正确的。这种idle in transaction连接应该发生什么问题?

更新 感谢任何人的关注。通过将jdbc-driver更改为最新版本可以解决该问题。

2 个答案:

答案 0 :(得分:0)

长时间处于idle in transaction状态的事务是应用程序错误,但是您可能已经意识到了。

该问题的一个权宜之计是将idle_in_transaction_session_timeout设置为非零值。此参数从9.6开始可用,这为您提供了一个极好的理由,即将升级到最新版本。

答案 1 :(得分:0)

感谢任何人的关注。通过将jdbc-driver更改为最新版本可以解决该问题。