加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – postgresql错误:由于用户请求取消声明

发布时间:2020-12-14 16:36:46 所属栏目:Java 来源:网络整理
导读:什么原因导致 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位编译. 我的postg
什么原因导致 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位编译.

我的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异常时,取消定时器尚未被取消并保持活动(这就是它的实现方式).因为池,连接后面没有关闭,而是返回到池.
之后,当取消定时器触发时,它随机取消当前与该定时器相关联的连接的查询.在这一刻,这是一个完全不同的查询,解释了随机效应.

建议的解决方法是放弃setQueryTimeout()并使用PostgreSQL配置(statement_timeout).它不提供相同的灵活性,但至少总是有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读