当前位置: 首页 > 面试题库 >

PostgreSQL错误:由于用户请求而取消语句

鲜于凯歌
2023-03-14
问题内容

是什么导致了Postgresql中的此错误?

org.postgresql.util.PSQLException: ERROR: canceling statement due to user request

我的软件版本:

PostgreSQL的 9.1.6 on x86_64-redhat-linux-gnu, compiled by 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异常,取消计时器就不会被取消并保持活动状态(这就是实现方式)。由于存在池,后面的连接不会关闭,而是返回到池中。稍后,当取消计时器触发时,它会随机取消当前与此计时器创建时所使用的连接相关的查询。目前,这是一个完全不同的查询,它解释了随机性的影响。

建议的解决方法是放弃setQueryTimeout(),改用PostgreSQL配置(statement_timeout)。它没有提供相同级别的灵活性,但至少始终有效。



 类似资料:
  • 在待机模式下对PostgreSQL db运行查询时,我得到以下错误。导致错误的查询在1个月内正常工作,但当查询超过1个月时,会导致错误。 有什么解决的建议吗?谢谢

  • 问题内容: 我正在尝试使用Google App脚本将数据添加到我的Google Cloud SQL数据库中。我的代码昨晚结束时工作正常,但是今天早晨运行时,它现在给我错误“由于超时或客户端请求而取消了声明”,我在云控制台中遇到的错误是“得到了一个错误阅读信息”通信数据包”。 昨晚它正在处理大约1600行数据。我玩弄它并缩小了范围,以至于当15行多了时,就会发生错误。15行会很好地添加数据,将其更改

  • 我在google cloud中创建了一个google cloud函数,它将连接到我在google cloud中创建的postgresql实例。 我正在使用'pg'节点模块。 我已经为此创建了一个私有IP。 我收到以下错误: 错误:由于在timeout.ConnectionTimeouthAndle.SetTimeout(/workspace/node_modules/pg/lib/client.j

  • 我读了很多关于正确的超文本传输协议状态代码返回客户端请求错误的帖子和文章。其他人建议使用400,因为它在RFC 7231中被重新定义了,尽管我不确定给出的例子是否涵盖了我脑海中所有的客户端错误,因为这些例子是语法性的。 400(错误请求)状态代码表示服务器无法或将不会处理请求,原因是被认为是客户端错误(例如,格式错误的请求语法、无效的请求 消息帧或欺骗性请求路由)。 我确实在rfc 7231的附录

  • 当我运行我的gRPC客户端,它试图将请求流式传输到服务器时,我收到了这个错误:"TypeError: has typelist_iterator,但期望其中之一:bytes, unicode" 我需要以某种方式对我发送的文本进行编码吗?错误消息有一定的意义,因为我肯定是在传入一个迭代器。我从gRPC留档中假设这是需要的。(https://grpc.io/docs/tutorials/basic/p

  • 我正在处理PostgreSQL数据库。为了在其他不错的功能中实施迁移版本管理,我找到了用Go编写的迁移数据库迁移,并将其添加到我的项目中。到目前为止,我还没有遇到任何问题,但是,我遇到了一个问题,如果没有hacky解决方案,我无法克服。因此上下文如下,我有如下所示的迁移文件,其中包含4个表:user、sports、Chall和active。当我运行时,会抛出以下错误: 如果我从表中删除user\u