PostgreSQL 备份恢复与版本升级(pg_dump / pg_basebackup / pg_upgrade)
2026-08-11 01:32:30 # 数据库

PG 的备份恢复体系成熟,配合 WAL 归档还能做时间点恢复(PITR)。版本升级则有专门的 pg_upgrade 工具。本文一并梳理。

一、逻辑备份

1
2
pg_dump -U postgres -Fc mydb > mydb.dump     # 自定义格式(推荐,可选择性恢复)
pg_dumpall -U postgres > cluster.sql # 整实例(含角色/表空间)

恢复:

1
pg_restore -U postgres -d mydb -j 4 mydb.dump   # -j 并行

二、物理备份 + PITR

1
pg_basebackup -h 主库 -U repl -D /backup/base -Fp -Xs   # 基础备份

配合 postgresql.conf 开启 WAL 归档:

1
2
archive_mode = on
archive_command = 'cp %p /archive/%f'

恢复时:还原基础备份 → 在 recovery.signal 中指定 recovery_target_time → 启动到指定时间点。

三、大版本升级(pg_upgrade)

以 14 → 16 为例:

1
2
3
4
5
6
# 安装新版本后
pg_upgrade -b /usr/lib/postgresql/14/bin \
-B /usr/lib/postgresql/16/bin \
-d /var/lib/pgsql/14/data \
-D /var/lib/pgsql/16/data \
--link # 硬链接方式,省去拷贝数据

--link 速度快但原数据目录会被改,升级前务必全量备份。

四、版本升级注意事项

  • 扩展兼容性:确认 pg_stat_statementspostgis 等扩展在新版本可用。
  • 编码与 locale:新老集群需一致,否则 pg_upgrade 报错。
  • 先升级测试库:在镜像环境验证应用兼容性,再动生产。

五、备份铁律(与 MySQL 一致)

  • 定期 + 异地 + 加密;
  • 演练恢复,不要等到出事才发现备份坏了;
  • 大库优先考虑物理备份/PITR。

小结

逻辑用 pg_dump/pg_restore,时间点恢复靠基础备份+WAL 归档;大版本升级用 pg_upgrade(–link 快但先备份);升级前核对扩展与 locale。