温馨提示×

Ubuntu下PostgreSQL的版本升级策略

小樊
32
2025-12-26 13:22:07
栏目: 云计算

Ubuntu 下 PostgreSQL 版本升级策略

一 升级总览与原则

  • 明确区分两类升级:
    • 小版本升级(如 14.5 → 14.7):同一主版本内部存储格式不变,通常只需替换二进制并重启实例。
    • 大版本升级(如 14.x → 15.x):系统表布局可能变化,需通过 pg_upgrade 或逻辑导出导入完成。
  • 升级前必须完成:
    • 全量备份(如 pg_dumpall)、检查当前版本、评估扩展与应用的兼容性
  • 建议始终保留回滚方案(备份、旧集群保留、维护窗口)。

二 小版本升级策略(同主版本)

  • 适用场景:如 14.5 → 14.715.4 → 15.6
  • 核心要点:内部存储格式不变,直接更新软件包并重启即可。
  • 推荐步骤:
    1. 备份:sudo -u postgres pg_dumpall > backup.sql
    2. 检查版本:sudo -u postgres psql -c "SELECT version();"
    3. 更新软件包:sudo apt update && sudo apt upgrade postgresql-<主版本号>(如 postgresql-14
    4. 重启:sudo systemctl restart postgresql
    5. 验证:sudo -u postgres psql -c "SELECT version();"
  • 说明:小版本升级不需要 pg_upgrade;若使用包管理器安装,通常只替换可执行文件与库,数据目录保持不变。

三 大版本升级策略(跨主版本)

  • 适用场景:如 14.x → 15.x15.x → 16.x
  • 方案选型:
    • pg_upgrade(推荐,速度快):创建新系统表并复用旧用户数据文件;支持 --check 预检;可用 --link 硬链接减少拷贝与磁盘占用,但要求新旧数据目录在同一文件系统,且启动新集群后旧集群不可再用。
    • 逻辑导出导入(安全、跨平台/跨版本兼容)pg_dumpall 导出 → 初始化新集群 → 导入;停机时间相对更长,但兼容性最好。
  • 标准流程(以 14 → 15 为例):
    1. 安装新版本:添加 PostgreSQL 官方 APT 仓库sudo apt install postgresql-15
    2. 停止旧实例:sudo systemctl stop postgresql
    3. 初始化新集群:sudo /usr/lib/postgresql/15/bin/pg_ctl initdb -D /var/lib/postgresql/15/main
    4. 预检兼容性: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
    5. 执行升级(如预检通过):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
    6. 重建统计信息:sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
    7. 配置与启动:按需复制/调整 postgresql.confpg_hba.conf,必要时将新实例端口改为 5433 以便与旧实例并存验证;sudo systemctl start postgresql@15-main
    8. 验证:sudo -u postgres psql -p 5433 -c "SELECT version();"
    9. 清理:确认无误后再移除旧版本与旧集群(如 apt remove postgresql-14,谨慎操作)。
  • 逻辑导入简要流程:
    1. sudo -u postgres pg_dumpall -f backup.sql
    2. 初始化新集群(见上)
    3. sudo systemctl start postgresql@15-main
    4. sudo -u postgres psql -f backup.sql postgres
  • 关键注意:
    • 升级后需重新安装/升级扩展(如 PostGIS)。
    • 使用 --link 可显著节省时间与空间,但会共享数据文件,启动新集群后旧集群即不可用;务必先做好备份与预检。
    • 升级完成后运行统计信息收集,避免执行计划退化。

四 复制与生产实践要点

  • 复制环境(流复制/逻辑复制):
    • 常见做法是滚动升级:先升级备库,再切换主备;或搭建新主新备后切换应用。
    • 使用 pg_upgrade 时,建议先在备库完成升级与验证,再对主库执行;升级窗口内控制写入,避免复制中断。
  • 客户端与工具链一致性:
    • 进行备份/导出时,客户端工具(如 pg_dump)版本应与目标服务器相同或更高,避免出现 “服务器版本高于客户端工具版本” 的错误。
  • 配置与权限:
    • 并存验证阶段,新实例可用 5433 端口;pg_hba.confpostgresql.conf 按需从旧实例迁移并调整(如 listen_addressesport)。
  • 回滚与演练:
    • 保留旧集群与备份,先在非生产环境演练;升级失败可从备份恢复或切回旧实例。

0