You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL从库收到提升信号时的WAL回放与提升时机问题

PostgreSQL 11.4 流复制备库提升时机说明

核心结论

针对你描述的测试场景(多份待回放WAL已落盘备库、通过创建pg_failover_trigger文件触发提升),备库的提升逻辑属于你列的第一种情况:

先回放完成触发信号时点所有已存在于本地的待回放WAL文件后再执行提升,不会收到信号立刻中断回放造成已落盘WAL的数据丢失。

具体执行逻辑

  • 备库负责WAL回放的startup进程检测到提升触发信号后,不会立刻退出恢复模式,会先进入恢复收尾阶段:
    • 若当前处于pg_wal_replay_pause()触发的回放暂停状态,会自动退出暂停状态
    • 逐段重放本地pg_wal目录下所有连续、可读的待回放WAL记录,直到本地没有可连续解析回放的WAL为止
    • 完成上述回放后,才会执行后续提升动作:更新控制文件生成新的时间线、切换数据库为可读写模式、开放用户连接
  • 触发提升时如果主库仍在持续写入并发送WAL:
    • 备库负责从主库拉取WAL的walreceiver进程会在提升流程启动后立刻终止
    • 后续主库推送过来的WAL流会被直接拒绝接收,不会等待这部分未传输完成的WAL落盘回放,直接在本地已有WAL回放完成后结束提升流程

注意事项

该逻辑下不会丢失的事务范围,仅限触发提升信号的时点,已经完整写入备库本地pg_wal目录的连续WAL对应的已提交事务;触发信号时点还在网络传输中、未完整落盘备库的WAL对应的事务,不会被回放,属于流复制切换的正常数据差异,不属于异常丢失。

内容的提问来源于stack exchange,提问作者krithikaGopalakrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:31:00