温馨提示×

Ubuntu上如何升级PostgreSQL版本

小樊
52
2025-12-20 17:28:30
栏目: 云计算

Ubuntu 上升级 PostgreSQL 的完整步骤

一 升级前准备

  • 备份所有数据库(强烈建议):使用物理备份或逻辑备份,例如执行:sudo -u postgres pg_dumpall > /path/to/backup.sql,并将备份文件妥善离线保存。小版本升级通常可直接通过包管理器完成;跨主版本升级(如 14 → 15)需按兼容性说明执行升级流程。升级前确认新版本在目标系统上的支持情况与变更项。完成后可验证版本:sudo -u postgres psql -c "SELECT version();"

二 安装新版本软件包

  • 添加 PostgreSQL 官方 APT 仓库并导入 GPG 密钥(若尚未添加):
    • 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 -
  • 更新索引并安装新主版本软件包(示例为 15):sudo apt update && sudo apt install postgresql-15。如需同时保留旧版本,可并行安装多个主版本包;安装后检查服务状态:sudo systemctl status postgresqlsudo systemctl status postgresql@15-main。注意:仅安装新版本软件包并不会自动升级现有数据目录,需要按下一节执行数据迁移。

三 大版本升级数据目录

  • 方式一 使用 pg_upgrade(推荐,速度快)
    1. 停止旧版本与新版本服务:sudo systemctl stop postgresql(或分别停止旧集群与新集群)。
    2. 执行检查(示例从 14 → 15):
      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'
    3. 升级完成后重建统计信息:sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
  • 方式二 逻辑转储(更安全,跨版本兼容性好)
    1. 导出旧库:sudo -u postgres pg_dumpall -f /path/to/backup.sql
    2. 初始化新集群:sudo -u postgres /usr/lib/postgresql/15/bin/initdb -D /var/lib/postgresql/15/main
    3. 启动新版本服务:sudo systemctl start postgresql@15-main
    4. 导入数据:sudo -u postgres psql -f /path/to/backup.sql postgres
  • 提示:若需临时让新旧版本并存,可在新版本的 postgresql.conf 中设置不同端口(如将新版本改为 5433),完成验证后再切回 5432

四 切换与清理

  • 切换应用连接:将应用与客户端指向新版本端口(默认 5432;若调整过则为新端口)。
  • 验证升级结果:连接数据库并检查版本与新特性:sudo -u postgres psql -c "SELECT version();"
  • 清理旧版本(确认无误后再执行):
    • 停止旧版本服务并删除旧集群:sudo systemctl stop postgresql@14-mainsudo pg_dropcluster 14 main --stop
    • 卸载旧版本软件包(如不再需要):sudo apt remove postgresql-14
  • 配置与权限:必要时合并或迁移 postgresql.confpg_hba.conf,并重启新版本服务使配置生效。

五 常见问题与实用建议

  • 客户端版本不匹配导致备份/连接失败:例如本地 pg_dump 版本低于服务器版本会出现报错。解决方法是安装并使用与新服务器匹配的客户端工具(如安装 postgresql-15 附带的客户端组件),或直接使用新版本软件包中的 pg_dump 执行备份。
  • 远程访问与端口:如需远程连接,在 postgresql.conf 中设置 listen_addresses = '*',在 pg_hba.conf 中按需配置认证方式(如 md5scram-sha-256),并确保云厂商安全组/防火墙已放行对应端口(默认 5432)。
  • 升级顺序要点:先备份 → 安装新版本软件包 → 用 pg_upgrade 或逻辑转储迁移数据 → 验证 → 切换并清理。任何时候都保留一份可用的备份,并在维护窗口内执行升级。

0