如何配置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
- 编辑14版本配置文件:
步骤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
相关产品推荐
相关产品推荐

