PostgreSQL 9.3 事务空闲

PostgreSQL 9.3 idle in transaction

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

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

问题只能通过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-驱动程序更改为最新版本解决了该问题。

长时间保持 idle in transaction 状态的交易是应用程序错误,但您可能已经意识到这一点。

该问题的一个权宜之计“解决方案”是将 idle_in_transaction_session_timeout 设置为非零值。这个参数从9.6开始可用,这给了你一个尽快升级到最新版本的绝佳理由。

感谢大家的关注。通过将 jdbc-驱动程序更改为最新版本解决了该问题。