在待机模式下对PostgreSQL数据库运行查询时,我遇到以下错误.导致错误的查询可以正常工作1个月,但如果查询时间超过1个月,则会出现错误.

ERROR: canceling statement due to conflict with recovery
Detail: User query might have needed to see row versions that must be removed

有没有关于如何解决的建议?谢谢

推荐答案

在热备用服务器上运行查询有些棘手——它可能会失败,因为在查询过程中,一些需要的行可能会在主服务器上更新或删除.由于主服务器不知道查询是在辅助服务器上启动的,所以它认为可以清理(清除)其行的旧版本.然后,secondary必须重播此清理,并且必须强制取消所有可以使用这些行的查询.

较长的查询将更频繁地被取消.

您可以通过在主服务器上启动一个可重复读取事务来解决这个问题,该事务执行虚拟查询,然后在辅助服务器上运行真正的查询时处于空闲状态.它的存在将防止主服务器上的旧行版本被清空.

有关此主题和其他解决方法的更多信息,请参阅文档中的Hot Standby — Handling Query Conflicts节.

Postgresql相关问答推荐

如何在PSQL中查询jsonb列包含字符串的嵌套数组

PostgreSQL散列连接与嵌套循环和散列索引

PostgreSQL:函数结果表内冲突(...)上的";中的字段名称

Pogresql性能中的枚举与文本数据类型

在Postgres中如何连接具有相同名称列的表并更改列名称?

如何使用有限的varchar在postgres中存储单词é

在 jOOQ 中 Select 相同的命名列

查找最小值和最大值

如何在 PSQL 中查找从另一个表继承的子表

Select 日期最高的行

Rails 3:在 Postgres 支持的 ActiveRecord 中使用 json 作为列类型时出现迁移错误

Postgres - 如果找不到记录,则在更新时返回错误

Postgis 中 2 点之间的距离,单位为 4326 米

SQL:多次重复结果行,并对行进行编号

POSTGRESQL 中的 CHARINDEX (SQL SERVER) 相似函数是什么?

psql 致命角色不存在

如何使用 Django Migrations 重新创建已删除的表?

Postgres 数据库文件保存在 ubuntu 中的什么位置?

使用 SQLAlchemy 进行 PostgreSQL ILIKE 查询

错误:permission denied for language c