Ubuntu 上 PostgreSQL 升级指南
一 升级前准备
sudo -u postgres pg_dumpall > /path/to/backup.sql,确保可回滚。检查当前版本:sudo -u postgres psql -c "SELECT version();"。确认目标版本与扩展/驱动兼容性,并选择维护窗口。小版本(如 14.5 → 14.7)通常可直接通过包管理器完成;大版本(如 14 → 15)需按下方步骤迁移数据。二 小版本升级
sudo systemctl stop postgresql,再更新软件包 sudo apt update && sudo apt upgrade postgresql-<当前主版本>(例如 postgresql-14),最后启动 sudo systemctl start postgresql。验证:sudo -u postgres psql -c "SELECT version();"。三 大版本升级
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(旧版),sudo systemctl stop 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 -o '-c config_file=/etc/postgresql/14/main/postgresql.conf' -O '-c config_file=/etc/postgresql/15/main/postgresql.conf'。sudo systemctl start postgresql@15-main,运行升级后统计信息脚本:sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages 或执行生成的 analyze_new_cluster.sh。sudo -u postgres psql -c "SELECT version();"。sudo apt remove postgresql-14,并按需删除旧集群目录与配置。sudo -u postgres pg_dumpall -f /path/to/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/backup.sql postgres。sudo -u postgres psql -c "SELECT version();"。四 常见问题与排错
/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 旧主版本包,并删除旧集群目录与配置,避免误删。