温馨提示×

Ubuntu上PostgreSQL版本如何升级

小樊
31
2025-12-16 18:17:31
栏目: 云计算

Ubuntu 上 PostgreSQL 升级指南

一 升级前准备

  • 备份全部数据(强烈建议):使用物理备份或逻辑备份,例如执行:sudo -u postgres pg_dumpall > /path/to/backup.sql,确保可回滚。检查当前版本:sudo -u postgres psql -c "SELECT version();"。确认目标版本与扩展/驱动兼容性,并选择维护窗口。小版本(如 14.5 → 14.7)通常可直接通过包管理器完成;大版本(如 14 → 15)需按下方步骤迁移数据。

二 小版本升级

  • 适用于同一主版本内的补丁升级(如 14.x → 14.y):先停止服务 sudo systemctl stop postgresql,再更新软件包 sudo apt update && sudo apt upgrade postgresql-<当前主版本>(例如 postgresql-14),最后启动 sudo systemctl start postgresql。验证:sudo -u postgres psql -c "SELECT version();"

三 大版本升级

  • 方案 A 使用 pg_upgrade(推荐,速度快)
    1. 安装新版本软件包(若默认仓库版本不够,可添加官方仓库):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
    2. 停止旧版本与新版本服务:sudo systemctl stop postgresql(旧版),sudo systemctl stop postgresql@15-main(新版)。
    3. 执行升级前检查(以 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
    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 -o '-c config_file=/etc/postgresql/14/main/postgresql.conf' -O '-c config_file=/etc/postgresql/15/main/postgresql.conf'
    5. 启动新版本:sudo systemctl start postgresql@15-main,运行升级后统计信息脚本:sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages 或执行生成的 analyze_new_cluster.sh
    6. 验证:sudo -u postgres psql -c "SELECT version();"
    7. 确认无误后清理旧版本(可选):sudo apt remove postgresql-14,并按需删除旧集群目录与配置。
  • 方案 B 逻辑转储(更安全,跨小版本/跨平台兼容)
    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
    5. 验证:sudo -u postgres psql -c "SELECT version();"

四 常见问题与排错

  • 新旧版本并存与端口:若需并行验证,可将新版本端口改为 5433,旧版本保持 5432,在 /etc/postgresql/15/main/postgresql.conf 中设置 port = 5433 并重启;验证无误后再切回 5432
  • 认证与远程访问:在 /etc/postgresql/15/main/pg_hba.conf 中按需配置 local all postgres trust(本地免密仅用于维护)与 host all all 0.0.0.0/0 md5/scram-sha-256;在 postgresql.conf 设置 listen_addresses = '*' 以允许远程。
  • 升级失败排查:检查 pg_upgrade 日志与新旧二进制路径、目录权限、配置文件差异;必要时回滚到备份。
  • 清理旧版本:确认新版本稳定后,再 apt remove 旧主版本包,并删除旧集群目录与配置,避免误删。

0