暂无图片
PostgreSQL错误:由于与恢复冲突而取消语句
我来答
分享
隐于平凡
2021-09-26
PostgreSQL错误:由于与恢复冲突而取消语句

在备用模式下在PostgreSQL db上运行查询时,我会得到以下错误。导致错误的查询工作时间为1个月,但当查询时间超过1个月时,则会产生错误结果。

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

复制
我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
Murkey

大概原因是:主节点的相关表做了DDL或者DML,wal在备节点回放的时候,备节点的查询还在进行,如此就会发生冲突,强制退出备节点查询的语句,报出以上错误。

解决办法大概有以下办法:

1、设置hot_standby_feedback = on

默认情况下,主数据库是看不到从数据库上的查询操作的,设置hot_standby_feedback为on,可以防止主数据库的vacuum操作把从数据库查询需要的数据行给清除掉。但是这个方案可能会影响主数据库的性能,因为主数据库现在得考虑从数据库的查询,势必会是一种负担,如在pg官方文档中写道:Well, the disadvantage of it is that the standby can bloat the master, which might be surprisi

2、设置max_standby_streaming_delay,这个值设置大一些。
pg中有一个max_standby_streaming_delay参数,意思是从数据库replay主数据库操作可以等待的最长时间。默认是30s,将其设置为一个相对比较大的数,或者-1,也就是可以无限等待,可以在所有查询完成之后再replay主数据库的操作,这样长查询就不会被取消了。这个参数相比hot_standby_feedback,只会影响从服务区,对主服务区没影响,但是有可能会加大主从数据不一致。

step1和step2各有优缺点,目前pgsql的主从这块没有完美的方案,就看哪种场景比较合适自己业务,就选用哪一种场景了。

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
pg14 遇到的性能问题,大家遇到过吗,请帮忙指点一二,着急。
回答 2
已采纳
核查后,是分区表的数量过多引起的,已经改善分区小于100,分区扫描范围<4 性能较好;
如何在PG上实现Oracle的嵌套表? 觉得这个是一个很有意思的功能,想要在开源的数据库postgresql上自己实现一个,但是不懂其中的技术原理,因此来请教一下
回答 1
已采纳
PG上可以安装插件实现这个功能。
pg中的concurrently参数重建索引,如果索引没有完成,查询能否使用上索引?
回答 1
在PostgreSQL中,使用CONCURRENTLY选项进行索引的重建允许在不阻止对表的并发插入、更新或删除操作的情况下重建索引。这是PostgreSQL提供的一个非常有用的特性,特别是在需要重建大
pg几个问题
回答 2
第二个问题:应该类似,PG是主从物理流复制,支持同步模式或者异步模式以及级联复制。同步模式也支持仲裁,设置同步提交到多个节点。
postgreSQL 的慢查询日志postgresql-2022-12-29_113144.csv这种的,怎么格式化打开更好看?
回答 1
通过postgresfdw创建外部表方式,读取更直观。
pg中临时文件使用情况,怎么查看?来判断work_mem是否够用
回答 4
已采纳
也通过打开logtempfiles配置(以bytes为单位),判断需要多少空间;打开之后,可以在日志中看到:LOG:temporaryfile:path"base/pgsqltmp/pgsqltmp5
pg中某个表年龄很大,会发生autovacuum,但是数据库某个库的年龄很大会发生什么?
回答 1
由于PG的事务数量是有上限的,新老事务之间的年龄超过最大值之后必须要冻结,所以要及时监控,及时处理
text和[]char类型有什么差别吗?
回答 1
有区别的https://www.modb.pro/db/100333下表列出了可在PostgreSQL通用字符类型。名称描述varchar(n)variablelengthwithlimitchar(
postgresql 存储过程怎么实现跳过异常往下继续跑?
回答 1
已采纳
在for循环里加个子块写个exception异常捕获forloopbegininsertintoexceptionwhenendendloop
postgresql 可以对分区进行分区吗?
回答 2
PostgreSQL的子分区可以了解一下