需要升级 PostgreSQL 大版本(如 15→16/17)以获得新特性、性能改进或支持。常用 pg_upgrade 原地升级或逻辑导出导入。
psql -c 'SELECT version();'
psql -c '\l'
psql -c '\dx'
pg_lsclusters
/usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/main
/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
pg_ctl -D /var/lib/postgresql/15/main stop -m fast
pg_upgrade ... --link --jobs=4
--link 更快但不可回退到旧集群;保守场景用 --copy。
pg_ctl -D /var/lib/postgresql/16/main start
vacuumdb --all --analyze-in-stages
SELECT version(); 为新版本。--link 升级后旧集群可能不可用;回滚通常依赖备份。pg_upgrade --check 会失败。--link 不可逆;生产先用 --copy 或测试环境验证。ANALYZE。pg_upgrade — 大版本升级pg_dump / pg_restore — 逻辑迁移pg_ctl — 启停vacuumdb — 统计信息