PostgreSQL Field Guide

复制、故障切换与升级

区分物理和逻辑复制,用可回退清单完成版本切换

物理与逻辑复制

维度物理流复制逻辑复制
单位WAL/实例表级变更
目标同一大版本体系的 standby、HA、只读选择表、跨大版本迁移、数据分发
DDL物理同步通常需要另行同步 schema
序列物理同步需单独处理序列状态
写入冲突standby 不写subscriber 本地写入可能冲突

物理 standby 的基本观测:

-- primary
SELECT application_name, state, sync_state,
       sent_lsn, write_lsn, flush_lsn, replay_lsn
FROM pg_stat_replication;

-- standby
SELECT pg_is_in_recovery(),
       pg_last_wal_receive_lsn(),
       pg_last_wal_replay_lsn(),
       now() - pg_last_xact_replay_timestamp() AS replay_delay;

没有新事务时,时间型 replay delay 可能为空或看起来很大;同时看 LSN、WAL 速率和业务健康。

复制槽

复制槽可防止所需 WAL 被过早删除,但消费者停止时会持续占用磁盘。为 slot lag 和 pg_wal 空间设置告警与容量上限;删除槽前确认没有消费者依赖。

SELECT slot_name, slot_type, active,
       pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained
FROM pg_replication_slots;

故障切换不是单条命令

切换流程要覆盖:确认 primary 确实不可用、评估未同步 WAL、提升目标节点、让旧 primary 无法继续接受写入(fencing)、更新路由、验证写入与后台任务、重建冗余。缺少 fencing 可能产生双主分叉。

升级路径

  • 小版本:同一 major 内只包含修复;通常更换二进制并重启,但仍要阅读 release notes。
  • 大版本:需要 pg_upgrade、逻辑 dump/restore 或逻辑复制迁移;数据目录不向前兼容。
  • 可以跨过中间 major 直接升级,但应阅读所有中间版本 release notes,并验证扩展支持。

大版本切换清单

  1. 清点扩展、collation、数据类型、驱动与复制拓扑。
  2. 在恢复出的生产副本上演练升级,统计停机、磁盘与 ANALYZE 时间。
  3. 跑应用测试、关键查询计划对比和数据校验。
  4. 冻结或双写期间明确 source of truth。
  5. 切换前确认复制追平、长事务清空、回退窗口仍有效。
  6. 切换后重建统计、检查 invalid objects、错误率、性能与备份。

如果目标是当前正在测试的 major,请使用 PostgreSQL 19:新功能与 18 升级 19 指南 核对 Beta 状态、兼容性变化与 pg_upgrade --check 清单。

版本支持

PostgreSQL 每个 major 通常支持 5 年。新系统使用受支持版本的最新 minor;截至 2026-08,18、17、16、15、14 受支持,14 将在 2026-11 结束支持。详见 版本策略

Last updated on

On this page