You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下PostgreSQL 14升级遇阻:无法切换集群并迁移数据

PostgreSQL 12/13集群迁移至14并卸载旧版本的解决方案

1. 解决pg_dump版本指向旧版的问题

系统默认PATH优先指向了旧版本的PostgreSQL工具目录,可通过以下方式切换到14版本工具链:

  • 临时调整PATH(当前会话生效):
    export PATH=/usr/lib/postgresql/14/bin:$PATH
    
    执行后执行pg_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=5434
    
    执行完成后,当前目录会生成delete_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:45:34