在我们的产品中,有时会出现通过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更改为最新版本可以解决该问题。
答案 0 :(得分:0)
长时间处于idle in transaction
状态的事务是应用程序错误,但是您可能已经意识到了。
该问题的一个权宜之计是将idle_in_transaction_session_timeout
设置为非零值。此参数从9.6开始可用,这为您提供了一个极好的理由,即将升级到最新版本。
答案 1 :(得分:0)
感谢任何人的关注。通过将jdbc-driver更改为最新版本可以解决该问题。