Ubuntu下PostgreSQL的版本升级策略
导读:Ubuntu 下 PostgreSQL 版本升级策略 一 升级总览与原则 明确区分两类升级: 小版本升级(如 14.5 → 14.7):同一主版本内部存储格式不变,通常只需替换二进制并重启实例。 大版本升级(如 14.x → 15.x)...
Ubuntu 下 PostgreSQL 版本升级策略
一 升级总览与原则
- 明确区分两类升级:
- 小版本升级(如 14.5 → 14.7):同一主版本内部存储格式不变,通常只需替换二进制并重启实例。
- 大版本升级(如 14.x → 15.x):系统表布局可能变化,需通过 pg_upgrade 或逻辑导出导入完成。
- 升级前必须完成:
- 全量备份(如
pg_dumpall)、检查当前版本、评估扩展与应用的兼容性。
- 全量备份(如
- 建议始终保留回滚方案(备份、旧集群保留、维护窗口)。
二 小版本升级策略(同主版本)
- 适用场景:如 14.5 → 14.7、15.4 → 15.6。
- 核心要点:内部存储格式不变,直接更新软件包并重启即可。
- 推荐步骤:
- 备份:
sudo -u postgres pg_dumpall > backup.sql - 检查版本:
sudo -u postgres psql -c "SELECT version(); " - 更新软件包:
sudo apt update & & sudo apt upgrade postgresql-< 主版本号>(如postgresql-14) - 重启:
sudo systemctl restart postgresql - 验证:
sudo -u postgres psql -c "SELECT version(); "
- 备份:
- 说明:小版本升级不需要
pg_upgrade;若使用包管理器安装,通常只替换可执行文件与库,数据目录保持不变。
三 大版本升级策略(跨主版本)
- 适用场景:如 14.x → 15.x、15.x → 16.x。
- 方案选型:
- pg_upgrade(推荐,速度快):创建新系统表并复用旧用户数据文件;支持
--check预检;可用--link硬链接减少拷贝与磁盘占用,但要求新旧数据目录在同一文件系统,且启动新集群后旧集群不可再用。 - 逻辑导出导入(安全、跨平台/跨版本兼容):
pg_dumpall导出 → 初始化新集群 → 导入;停机时间相对更长,但兼容性最好。
- pg_upgrade(推荐,速度快):创建新系统表并复用旧用户数据文件;支持
- 标准流程(以 14 → 15 为例):
- 安装新版本:添加 PostgreSQL 官方 APT 仓库 并
sudo apt install postgresql-15 - 停止旧实例:
sudo systemctl stop postgresql - 初始化新集群:
sudo /usr/lib/postgresql/15/bin/pg_ctl initdb -D /var/lib/postgresql/15/main - 预检兼容性:
sudo -u postgres /usr/lib/postgresql/15/bin/pg_upgrade -b /usr/lib/postgresql/14/bin -B /usr/lib/postgresql/15/bin -d /var/lib/postgresql/14/main -D /var/lib/postgresql/15/main --check - 执行升级(如预检通过):
sudo -u postgres /usr/lib/postgresql/15/bin/pg_upgrade -b /usr/lib/postgresql/14/bin -B /usr/lib/postgresql/15/bin -d /var/lib/postgresql/14/main -D /var/lib/postgresql/15/main - 重建统计信息:
sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages - 配置与启动:按需复制/调整
postgresql.conf、pg_hba.conf,必要时将新实例端口改为 5433 以便与旧实例并存验证;sudo systemctl start postgresql@15-main - 验证:
sudo -u postgres psql -p 5433 -c "SELECT version(); " - 清理:确认无误后再移除旧版本与旧集群(如
apt remove postgresql-14,谨慎操作)。
- 安装新版本:添加 PostgreSQL 官方 APT 仓库 并
- 逻辑导入简要流程:
sudo -u postgres pg_dumpall -f backup.sql- 初始化新集群(见上)
sudo systemctl start postgresql@15-mainsudo -u postgres psql -f backup.sql postgres
- 关键注意:
- 升级后需重新安装/升级扩展(如 PostGIS)。
- 使用
--link可显著节省时间与空间,但会共享数据文件,启动新集群后旧集群即不可用;务必先做好备份与预检。 - 升级完成后运行统计信息收集,避免执行计划退化。
四 复制与生产实践要点
- 复制环境(流复制/逻辑复制):
- 常见做法是滚动升级:先升级备库,再切换主备;或搭建新主新备后切换应用。
- 使用
pg_upgrade时,建议先在备库完成升级与验证,再对主库执行;升级窗口内控制写入,避免复制中断。
- 客户端与工具链一致性:
- 进行备份/导出时,客户端工具(如 pg_dump)版本应与目标服务器相同或更高,避免出现 “服务器版本高于客户端工具版本” 的错误。
- 配置与权限:
- 并存验证阶段,新实例可用 5433 端口;
pg_hba.conf与postgresql.conf按需从旧实例迁移并调整(如listen_addresses、port)。
- 并存验证阶段,新实例可用 5433 端口;
- 回滚与演练:
- 保留旧集群与备份,先在非生产环境演练;升级失败可从备份恢复或切回旧实例。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下PostgreSQL的版本升级策略
本文地址: https://pptw.com/jishu/782411.html
