在我们的产品中,有时会发生使用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
会发生什么问题?
在我们的产品中,有时会发生事务连接处于空闲状态而锁定数据库的情况。我正在使用postgresql-9.3(9.4),通过jdbc驱动程序进行java连接。所有连接都是...
长时间处于idle in transaction
状态的交易是一个应用程序错误,但您可能已经意识到这一点。