在 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 |
✅ 适合:主版本不变
sudo yum update postgresql*
重启服务:
sudo systemctl restart postgresql
确认:
psql --version
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
sudo yum install -y postgresql15-server postgresql15-contrib
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl stop postgresql-13
假设:
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
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15
适合 跨大版本 + 零风险
pg_dumpinitdbpg_restorepg_dump -U postgres -d olddb -F c -f backup.dump
pg_restore -U postgres -d newdb backup.dump
✅ 优点:无兼容性问题
❌ 缺点:数据量大时慢
journalctl -xe -u postgresql*
可能原因:
SELECT version();
✅ 生产环境
✅ CentOS 7 用户
CentOS 7 已 EOL,强烈建议迁移到 Rocky / Alma / RHEL 9
你可以直接告诉我:
我可以给你 一步不出错的升级命令清单 ✅