复制、故障切换与升级
区分物理和逻辑复制,用可回退清单完成版本切换
物理与逻辑复制
| 维度 | 物理流复制 | 逻辑复制 |
|---|---|---|
| 单位 | 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,并验证扩展支持。
大版本切换清单
- 清点扩展、collation、数据类型、驱动与复制拓扑。
- 在恢复出的生产副本上演练升级,统计停机、磁盘与
ANALYZE时间。 - 跑应用测试、关键查询计划对比和数据校验。
- 冻结或双写期间明确 source of truth。
- 切换前确认复制追平、长事务清空、回退窗口仍有效。
- 切换后重建统计、检查 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