pg_upgrade
是 PostgreSQL 官方提供的工具,用于在不同大版本之间(如从 12 到 13、14 到 15 等)进行无损升级。以下是跨版本升级的详细步骤和注意事项:
一、升级前准备
1. 备份数据
-
全量备份:
pg_dumpall -U postgres -f backup.sql
-
文件系统备份(可选但推荐):
cp -R /var/lib/pgsql/data /path/to/backup/
2. 检查兼容性
-
确认目标版本支持当前数据格式(如从 12 升级到 15 需通过中间版本 13、14 逐步升级)。
-
检查扩展兼容性:
SELECT * FROM pg_extension; -- 记录当前安装的扩展
3. 停止旧版本服务,准备新版本二进制目录
# 停止旧版本(如 PostgreSQL 16)
systemctl stop postgresql-16
# 编译安装新版本(如 PostgreSQL 17)
# 示例(Rocky Linux/RHEL/openeuler):
curl -O https://ftp.postgresql.org/pub/source/v17.5/postgresql-17.5.tar.gz
curl -O https://ftp.postgresql.org/pub/source/v17.5/postgresql-17.5.tar.gz.md5
#校验md5值检查文件完整性 正常输出就是 postgresql-17.5.tar.gz: 成功
cat postgresql-*.tar.gz.md5 | md5sum -c -
#解压
tar -xvf postgresql-17.5.tar.gz
#创建新版本二进制文件目录
mkdir -p /var/lib/postgresql/17/main
#安装编译所需包,这个可以在其他同系统环境机器上线编译好
dnf install -y gcc make readline-devel zlib-devel flex bison libxml2-devel libxslt-devel openssl-devel pam-devel libicu-devel libpq-devel llvm-devel clang-devel clang lz4-devel zstd-devel openldap-devel systemd-devel
#在源码目录下,配置编译
cd postgresql-17.5
./configure --prefix=/var/lib/postgresql/17/main \
--with-ssl=openssl