温馨提示×

PostgreSQL在Ubuntu上如何进行版本升级

小樊
47
2025-11-21 03:46:54
栏目: 云计算

Ubuntu 上升级 PostgreSQL 的完整步骤

一、升级前准备

  • 备份数据:使用物理或逻辑方式完整备份,确保在升级失败时可回滚。
    • 物理备份(推荐):对数据目录做快照或文件系统级拷贝(停机窗口内执行)。
    • 逻辑备份:导出所有数据库与角色
      • 单库:sudo -u postgres pg_dump dbname > dbname.sql
      • 全库:sudo -u postgres pg_dumpall > /path/to/full_backup.sql
  • 检查现状:确认当前版本与集群信息
    • sudo -u postgres psql -c "SELECT version();"
    • pg_lsclusters(查看所有集群与端口)
  • 选择升级策略
    • 小版本(如 14.5 → 14.7):直接用包管理器升级二进制与补丁。
    • 大版本(如 14.x → 15.x):安装新版本后迁移数据,常用两种方式
      • 就地升级:使用 pg_upgrade(速度快,要求兼容性检查通过)
      • 逻辑迁移:使用 pg_dumpall → 初始化新集群 → 导入(最稳妥,跨小版本/跨平台兼容性好)
  • 维护窗口与回滚预案:提前通知业务,准备回滚到旧集群或快照的方案。

二、小版本升级步骤(例如 14.5 → 14.7)

  • 更新软件源并升级对应主版本包
    • sudo apt update
    • sudo apt install --only-upgrade postgresql-14
  • 重启服务
    • sudo systemctl restart postgresql
  • 验证
    • sudo -u postgres psql -c "SELECT version();"
    • pg_lsclusters 确认仍是原来的 14/main 且运行正常。

三、大版本升级步骤(例如 14.x → 15.x)

  • 安装新版本二进制
    • 添加官方仓库(若尚未添加)
      • sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
      • wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
      • sudo apt update
    • 安装新主版本(示例为 15
      • sudo apt install postgresql-15
  • 准备迁移
    • 停止旧实例:sudo systemctl stop postgresql
    • 确认目录(常见路径,按实际为准)
      • 旧:/var/lib/postgresql/14/main
      • 新:/var/lib/postgresql/15/main
  • 方式一:使用 pg_upgrade(就地升级,速度快)
    • 兼容性检查
      • 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 \ -o '-c config_file=/etc/postgresql/14/main/postgresql.conf' \ -O '-c config_file=/etc/postgresql/15/main/postgresql.conf'
    • 重建统计信息
      • sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
  • 方式二:逻辑迁移(最稳妥)
    • 导出旧库
      • sudo -u postgres pg_dumpall > /path/to/full_backup.sql
    • 初始化新集群
      • sudo -u postgres /usr/lib/postgresql/15/bin/initdb -D /var/lib/postgresql/15/main
    • 启动新实例
      • sudo systemctl start postgresql@15-main
    • 导入数据
      • sudo -u postgres psql -f /path/to/full_backup.sql postgres
  • 配置与切换
    • 按需拷贝或合并配置(postgresql.confpg_hba.conf),注意端口与监听地址
      • 例如:listen_addresses = '*'(远程访问需开启)
    • 验证
      • sudo -u postgres psql -c "SELECT version();"
      • 应用自检关键业务
  • 清理(确认无误后再执行)
    • 删除旧集群(Debian/Ubuntu 工具)
      • sudo pg_dropcluster 14 main --stop
    • 停止旧服务(若仍在)
      • sudo systemctl disable --now postgresql@14-main

四、常见问题与注意事项

  • 端口与监听
    • 新版本可能使用不同端口(如 5432/5433),在 postgresql.conf 中设置 portlisten_addresses,在 pg_hba.conf 中配置认证方式(如 md5/scram-sha-256)。
  • 扩展与依赖
    • 升级后检查并更新扩展(如 postgispg_stat_statements):ALTER EXTENSION ... UPDATE;
  • 复制与高可用
    • 主从/流复制环境需按官方步骤升级主库后再升级备库,避免复制中断。
  • 回滚
    • 就地升级失败:切回旧集群(保持旧实例停止),检查数据与配置后再重试。
    • 逻辑迁移失败:直接用备份恢复,缩短停机时间。

0