java - PostgreSQL 错误 : canceling statement due to user request

标签 java postgresql exception

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/

相关文章:

java - 如何正确设计多个子类的组合?

java - 如何从代码生成jar文件?

node.js - 在 Node js 中连接到 postgres 时出错

Android:BitmapFactory.decodeStream OutOfMemoryException - SoftReference 是解决方案吗?

C++异常参数

java - MalformedURLException : no protocol with Xalan transformer

java - 部署在 tomcat 上的 Spring 应用程序 - org.apache.catalina.connector.ClientAbortException : java. io.IOException: Connection reset by peer

sql - 多个子选择连接到同一个表?

javascript - 基于先前查询的结果,在 Birt 中使用 Javascript 执行新查询

java - 如何在Java中将异常转换为错误代码?