Ubuntu下PostgreSQL 14升级遇阻:无法切换集群并迁移数据
PostgreSQL 12/13集群迁移至14并卸载旧版本的解决方案
1. 解决pg_dump版本指向旧版的问题
系统默认PATH优先指向了旧版本的PostgreSQL工具目录,可通过以下方式切换到14版本工具链:
- 临时调整PATH(当前会话生效):
执行后执行export PATH=/usr/lib/postgresql/14/bin:$PATHpg_dump --version即可显示14.x版本。
2. 数据迁移(推荐用pg_upgrade,比导出导入更高效)
操作步骤:
- 先停止所有PostgreSQL集群:
sudo systemctl stop postgresql@12-main postgresql@13-main postgresql@14-main - 切换到postgres用户执行升级操作:
sudo -u postgres bash - 运行pg_upgrade(从12版本迁移数据至14版本,因业务数据在12集群):
执行完成后,当前目录会生成/usr/lib/postgresql/14/bin/pg_upgrade \ --old-datadir=/var/lib/postgresql/12/main \ --new-datadir=/var/lib/postgresql/14/main \ --old-bindir=/usr/lib/postgresql/12/bin \ --new-bindir=/usr/lib/postgresql/14/bin \ --old-port=5432 \ --new-port=5434delete_old_cluster.sh脚本,后续可用来清理旧集群数据。 - 退出postgres用户:
exit
3. 调整14集群为默认端口5432
操作步骤:
- 编辑14集群的配置文件:
sudo nano /etc/postgresql/14/main/postgresql.conf - 找到
port = 5434行,修改为port = 5432,保存退出。 - 启动14集群并验证:
sudo systemctl start postgresql@14-main # 连接数据库检查版本和数据完整性 psql -U postgres -c "SELECT version();"
4. 停止并禁用旧版本集群
sudo systemctl stop postgresql@12-main postgresql@13-main sudo systemctl disable postgresql@12-main postgresql@13-main
此后执行sudo systemctl restart postgresql.service只会启动14集群。
5. 彻底卸载旧版本PostgreSQL
sudo apt remove --purge postgresql-12 postgresql-13 sudo apt autoremove --purge
若之前生成了delete_old_cluster.sh,可执行它清理旧集群数据目录:
sudo -u postgres bash delete_old_cluster.sh
注意事项
- 迁移前务必备份12集群数据,比如用12版本的pg_dumpall导出:
/usr/lib/postgresql/12/bin/pg_dumpall -U postgres > backup.sql - 如果12集群有自定义配置(如内存参数、连接数等),需手动从
/etc/postgresql/12/main/postgresql.conf复制到14的配置文件中。
内容的提问来源于stack exchange,提问作者djcaesar9114
相关产品推荐
相关产品推荐

