postgresql 中出现此错误的原因是什么?
org.postgresql.util.PSQLException: ERROR: canceling statement due to user request
我的软件版本:
PostgreSQL 9.1.6 on x86_64-redhat-linux-gnu,由 gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2) 编译,64-bit"。
我的postgresql驱动是:postgresql-9.2-1000.jdbc4.jar
使用java版本:Java 1.7
提示:我的 postgresql 数据库位于固态硬盘上,此错误是随机发生的,有时根本不会发生。
最佳答案
我们已经找出了这个问题的原因。这是由最新的 JDBC 驱动程序 9.2-100x 中的 setQueryTimeout() 的错误实现来解释的。如果您手动打开/关闭连接可能不会发生这种情况,但通常会在连接池到位且 autocommit 设置为 false 时发生。在这种情况下,应该使用非零值调用 setQueryTimeout()(例如,使用 Spring 框架的 @Transactional(timeout = xxx) 注解)。
事实证明,无论何时在语句执行期间引发 SQL 异常,取消计时器都没有被取消并保持 Activity 状态(这就是它的实现方式)。由于池化,后面的连接没有关闭,而是返回到池中。 稍后,当取消计时器触发时,它会随机取消当前与创建此计时器的连接关联的查询。目前,这是一个完全不同的查询来解释随机性效应。
建议的解决方法是放弃 setQueryTimeout() 并改用 PostgreSQL 配置 (statement_timeout)。它没有提供相同级别的灵 active ,但至少总是有效。
关于java - PostgreSQL 错误 : canceling statement due to user request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13114101/