PostgreSQL 大版本升级

适用场景

需要升级 PostgreSQL 大版本(如 15→16/17)以获得新特性、性能改进或支持。常用 pg_upgrade 原地升级或逻辑导出导入。

前置条件

步骤

  1. 记录旧集群信息:
psql -c 'SELECT version();'
psql -c '\l'
psql -c '\dx'
pg_lsclusters
  1. 安装新版本并初始化新数据目录:
/usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/main
  1. 运行兼容性检查:
/usr/lib/postgresql/16/bin/pg_upgrade \
  --old-bindir=/usr/lib/postgresql/15/bin \
  --new-bindir=/usr/lib/postgresql/16/bin \
  --old-datadir=/var/lib/postgresql/15/main \
  --new-datadir=/var/lib/postgresql/16/main \
  --check
  1. 停旧集群,执行升级:
pg_ctl -D /var/lib/postgresql/15/main stop -m fast
pg_upgrade ... --link --jobs=4

--link 更快但不可回退到旧集群;保守场景用 --copy。

  1. 启动新集群并更新统计信息:
pg_ctl -D /var/lib/postgresql/16/main start
vacuumdb --all --analyze-in-stages
  1. 更新连接串、systemd 单元、备份和监控配置。

验证

回滚

常见坑

相关命令