温馨提示×

centos怎么升级postgresql版本

小樊
46
2026-09-12 07:24:27
栏目: 云计算

在 CentOS 上升级 PostgreSQL 版本,常见做法是使用官方 RPM 仓库安装新版本,再迁移数据。下面按最稳妥、最常用的方式一步步说明(以 PostgreSQL 12 → 15 为例,其他版本同理)。


一、升级前准备

1. 备份数据库(最重要)

pg_dumpall > /tmp/pg_full_backup.sql

或物理备份数据目录:

systemctl stop postgresql
cp -r /var/lib/pgsql/12 /var/lib/pgsql/12_bak

2. 查看当前版本

psql --version
rpm -qa | grep postgresql

二、添加 PostgreSQL 官方仓库

以 PostgreSQL 15 为例:

dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

CentOS 8 用 EL-8,CentOS 7 用 EL-7


三、安装新版本 PostgreSQL

dnf install -y postgresql15-server postgresql15

四、初始化新版本数据目录

/usr/pgsql-15/bin/postgresql-15-setup initdb
systemctl enable postgresql-15
systemctl start postgresql-15

默认新版本端口通常是 5433(避免冲突)


五、使用 pg_upgrade 升级数据(推荐)

1. 停止两个版本

systemctl stop postgresql-12
systemctl stop postgresql-15

2. 执行 pg_upgrade

su - postgres
/usr/pgsql-15/bin/pg_upgrade \
  --old-datadir=/var/lib/pgsql/12/data \
  --new-datadir=/var/lib/pgsql/15/data \
  --old-bindir=/usr/pgsql-12/bin \
  --new-bindir=/usr/pgsql-15/bin \
  --check

确认无问题后去掉 --check 再执行一次。


六、切换端口 & 清理旧版本

1. 修改新版本端口为 5432

vi /var/lib/pgsql/15/data/postgresql.conf
port = 5432

2. 重启新版本

systemctl start postgresql-15

3. 卸载旧版本(确认无误后)

dnf remove postgresql12*

七、其他可选方案

✅ 方案二:逻辑导出导入(简单但慢)

pg_dumpall | psql -h localhost -p 5433

✅ 方案三:使用 pglogical(少停机)


八、常见问题

  • 扩展不兼容:如 postgis、timescaledb,需安装对应新版本扩展
  • 编码问题:确保新旧库 locale 一致
  • 权限问题:pg_upgrade 必须用 postgres 用户执行

如果你告诉我:

  • CentOS 版本
  • 当前 PostgreSQL 版本
  • 是否允许停机

我可以给你精确命令版升级方案

0