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

如何配置PostgreSQL仅运行单版本 从12迁移到14并卸载旧版

问题背景

PostgreSQL新手,WSL-2 Ubuntu 20.04环境同时安装运行了PostgreSQL 12、14两个版本,怀疑版本并存导致Odoo 15数据库持续异常,需要完成PostgreSQL 12.11服务端到14.4服务端的迁移,并彻底移除12.11版本。

已执行命令及返回结果

WSL-2 Ubuntu 20.04 命令行执行结果

  • 执行命令 which psql,返回:
/usr/bin/psql
  • 执行命令 pg_config --version,返回:
PostgreSQL 14.4 (Ubuntu 14.4-1.pgdg20.04+1)
  • 执行命令 psql --version,返回:
psql (PostgreSQL) 14.4 (Ubuntu 14.4-1.pgdg20.04+1)

psql交互终端执行结果

  • 执行命令 SHOW server_version;,返回:
server_version
------------------------------------
 12.11 (Ubuntu 12.11-1.pgdg20.04+1)
(1 row)
  • 执行命令 SELECT version();,返回:
version
-------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 12.11 (Ubuntu 12.11-1.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, 64-bit
(1 row)
问题诊断

从返回结果可确认:当前环境安装的psql客户端为14.4版本,但默认连接的后台数据库服务运行的是12.11版本。两个版本并存时若端口配置、默认服务优先级设置冲突,确实会引发Odoo 15数据库连接异常、函数不兼容、备份还原失败等问题。

迁移&卸载操作步骤

步骤1:全量数据备份

迁移前必须完成数据备份,避免操作失误导致数据丢失:

  • 先停止Odoo 15服务,阻止迁移过程中新数据写入:
    sudo systemctl stop odoo15
  • 导出12.11版本所有数据库(含系统库、业务库)的全量备份:
    sudo -u postgres /usr/lib/postgresql/12/bin/pg_dumpall > ~/pg12_full_backup.sql
    备份完成后务必检查备份文件大小、内容完整性,确认备份有效后再进行后续操作

步骤2:确认两个版本集群状态

执行命令查看所有PostgreSQL集群的运行信息:
pg_lsclusters
命令返回会列出12、14两个版本的集群信息,记录两个集群的端口、数据目录、配置文件路径,默认配置下12版本通常占用5432默认端口,14版本占用5433端口。

步骤3:执行版本升级

  • 先停止两个版本的PostgreSQL服务:
sudo systemctl stop postgresql@12-main
sudo systemctl stop postgresql@14-main
  • 切换到postgres用户,使用硬链接模式执行升级(速度更快,占用空间更小):
sudo su - postgres
/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-options '-c config_file=/etc/postgresql/12/main/postgresql.conf' \
  --new-options '-c config_file=/etc/postgresql/14/main/postgresql.conf' \
  --link
  • 升级完成后退出postgres用户,调整端口配置避免冲突:
    • 编辑14版本配置文件:sudo nano /etc/postgresql/14/main/postgresql.conf,找到port =配置项,修改为port = 5432
    • 编辑12版本配置文件:sudo nano /etc/postgresql/12/main/postgresql.conf,找到port =配置项,修改为port = 5433

步骤4:验证14版本服务可用性

  • 启动14版本PostgreSQL服务:
    sudo systemctl start postgresql@14-main
  • 切换到postgres用户连接数据库,验证服务版本:
sudo su - postgres
psql -c "SELECT version();"

确认返回版本为14.4后,抽查Odoo对应业务库的表结构、数据完整性,验证无误后启动Odoo 15服务,测试全量业务功能是否正常。

步骤5:彻底卸载PostgreSQL 12.11

确认14版本运行稳定、业务无异常后,再执行卸载操作:

  • 停止并禁用12版本开机自启:
sudo systemctl stop postgresql@12-main
sudo systemctl disable postgresql@12-main
  • 移除12版本所有软件包:
sudo apt remove --purge postgresql-12 postgresql-client-12
sudo apt autoremove --purge
  • 清理12版本残留的配置、数据、日志文件:
sudo rm -rf /etc/postgresql/12
sudo rm -rf /var/lib/postgresql/12
sudo rm -rf /var/log/postgresql/postgresql-12-main.log
  • 最后执行pg_lsclusters确认仅剩余14版本集群,分别执行psql --version、连接数据库后执行SHOW server_version;,确认客户端、服务端版本统一为14.4即可。

内容的提问来源于stack exchange,提问作者Chris Rad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:36:20