Ubuntu 上 PostgreSQL 升级指南
一 升级前准备
sudo -u postgres pg_dumpall > /path/to/backup.sql。小版本升级通常可直接通过包管理器完成;大版本升级(如 14 → 15)需按兼容性说明执行升级流程。检查当前版本:sudo -u postgres psql -c "SELECT version();"。准备维护窗口,避免业务写入。二 小版本升级
sudo systemctl stop postgresqlsudo apt updatesudo apt upgrade postgresql-14(将 14 替换为你的实际主版本)sudo systemctl start postgresqlsudo -u postgres psql -c "SELECT version();"三 大版本升级
适用于跨主版本(如 14.x → 15.x)。思路是安装新版本,再用工具迁移数据(推荐 pg_upgrade;兼容性要求高时可用逻辑转储)。示例以 14 → 15 为例,路径与版本号请按实际环境调整。
安装新版本
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
sudo apt install postgresql-15
方式一 pg_upgrade(速度快,需二进制兼容)
sudo systemctl stop postgresqlsudo -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-mainsudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stagesanalyze_new_cluster.sh,确认无误后再运行 delete_old_cluster.sh 清理旧集群。方式二 逻辑转储(最稳妥,跨版本兼容性好)
sudo -u postgres pg_dumpall -f /path/to/backup.sqlsudo /usr/lib/postgresql/15/bin/pg_ctl initdb -D /var/lib/postgresql/15/main/sudo systemctl start postgresql@15-mainsudo -u postgres psql -f /path/to/backup.sql postgressudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages。四 常见问题与排错
pg_dump: 错误: 服务器版本: 15.5; pg_dump 版本: 13.14,说明本地 pg_dump 过旧。解决:安装与新服务器匹配的客户端工具(如安装 postgresql-15 附带的客户端),或用新版本服务器上的 pg_dump 远程导出。sudo systemctl stop postgresql@15-main),完成迁移后再启动;必要时调整 postgresql.conf 中的 port 避免端口冲突,升级验证无误后再恢复为 5432。/etc/postgresql/15/main/pg_hba.conf 与 postgresql.conf:将 listen_addresses 设为 '*',并在 pg_hba.conf 中对需要的来源配置 md5 或 scram-sha-256 认证;修改后重启服务生效。delete_old_cluster.sh 的输出或手动清理),避免误删导致回滚困难。