温馨提示×

PostgreSQL在CentOS如何升级

小樊
37
2026-08-31 03:26:34
栏目: 云计算

CentOS 上升级 PostgreSQL 有几种常见场景,下面按最常用、最安全的方式给你一份完整指南。
⚠️ 升级前务必备份数据


一、确认当前版本

psql --version
# 或
rpm -qa | grep postgres

示例:

psql (PostgreSQL) 13.12

二、升级方式选择

当前版本 目标版本 推荐方式
12 → 13 / 13 → 14 / 14 → 15 小版本或大版本 pg_upgrade(推荐)
低版本(如 9.x) 高版本(如 13+) pg_upgrade + 新仓库
只想升级小版本(如 13.10 → 13.12) 同主版本 yum update

三、方式一:使用 yum 升级(仅限小版本)

适合:主版本不变

sudo yum update postgresql*

重启服务:

sudo systemctl restart postgresql

确认:

psql --version

四、方式二:跨大版本升级(推荐 ✅)

1️⃣ 安装新版本 PostgreSQL(官方仓库)

添加 PostgreSQL 官方仓库

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

CentOS 8:

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

安装新版本(例如 15)

sudo yum install -y postgresql15-server postgresql15-contrib

2️⃣ 初始化新版本数据库

sudo /usr/pgsql-15/bin/postgresql-15-setup initdb

3️⃣ 停止旧版本数据库

sudo systemctl stop postgresql-13

4️⃣ 使用 pg_upgrade 升级

假设:

  • 旧版本:13
  • 新版本:15
su - postgres

/usr/pgsql-15/bin/pg_upgrade \
  --old-datadir=/var/lib/pgsql/13/data \
  --new-datadir=/var/lib/pgsql/15/data \
  --old-bindir=/usr/pgsql-13/bin \
  --new-bindir=/usr/pgsql-15/bin \
  --old-port=5432 \
  --new-port=5433

升级完成后:

./delete_old_cluster.sh

5️⃣ 启动新版本

sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15

五、方式三:逻辑升级(最安全,生产常用)

适合 跨大版本 + 零风险

步骤

  1. 旧库 pg_dump
  2. 新库 initdb
  3. 新库 pg_restore
pg_dump -U postgres -d olddb -F c -f backup.dump
pg_restore -U postgres -d newdb backup.dump

✅ 优点:无兼容性问题
❌ 缺点:数据量大时慢


六、常见问题

❓升级后无法启动

journalctl -xe -u postgresql*

可能原因:

  • data 目录权限错误
  • 端口冲突
  • postgresql.conf 不兼容

❓如何确认升级成功?

SELECT version();

七、升级建议(重要)

生产环境

  • 先在测试环境完整演练
  • 使用 逻辑备份
  • 保留旧数据目录至少 7 天

CentOS 7 用户

CentOS 7 已 EOL,强烈建议迁移到 Rocky / Alma / RHEL 9


八、我可以帮你定制方案

你可以直接告诉我:

  1. CentOS 版本(7 / 8 / Stream)
  2. 当前 PostgreSQL 版本
  3. 目标版本
  4. 是否是生产环境

我可以给你 一步不出错的升级命令清单

0