1.pg_upgrade工具介绍
pg_upgrade 会创建新的系统表,并以重用旧的数据文件的方式进行升级。
pg_upgrade 的参数选项如下:
-b bindir,--old-bindir=bindir:旧的 PostgreSQL 可执行文件目录;
-B bindir,--new-bindir=bindir:新的 PostgreSQL 可执行文件目录;
-c,--check:只检查升级兼容性,不更改任何数据
-d configdir,--old-datadir=configdir:旧版本的数据目录
-D configdir,--new-datadir=configdir:新版本的数据目录
-j,--jobs=njobs:要同时使用的进程或线程数
-k,--link:硬链接方式升级
-o options,--old-options options:直接传送给旧 postgres 命令的选项,多个选
项可以追加在后面
-O options,--new-options options:直接传送给新 postgres 命令的选项,多个
选项可以追加在后面
-p port,--old-port=port:旧版本的端口号
-P port,--new-port=port:新版本的端口号
-r,--retain:即使在成功完成后也保留 SQL 和日志文件
在升级之前应该运行 pg_upgrade -c 检查新旧版本的兼容性,把每一项不兼容的问题都解决了才可以顺利升级。使用 pg_upgrade -c 只会检查新旧版本的兼容性,不会运行真正的升级程序,不会修改数据文件,并且在命令结束时,会输出一份检查结果的报告,还会对需要手动调整的项做出简要的描述。
pg_upgrade 有普通模式和 link 模式两种升级模式。在普通模式下,会把旧版本的数据拷贝到新版本中,所以如果使用普通升级模式,要确保有足够的磁盘空间存储新旧两份数据;
link 模式下,只是在新版本的数据目录中建立了旧版本数据文件的硬链接,可以有效减少磁盘占用的空间。
(本文将采用普通升级模式进行升级)
2.版本信息
升级前 |
升级后 |
Postgresql 16.3 |
Postgresql 17.0 |
3.升级准备
安装依赖:(源环境已安装)
yum install libicu-devel.x86_64 python3 python3-devel
备份数据:
pg_dumpall -p 5432 > /tmp/backup.sql
4.安装新版pg数据库
上传安装包至/soft目录
tar -xvf postgresql-17.0.tar.gz
(1)编译安装
mkdir -p /usr/local/pg17
chown postgres:postgres /usr/local/pg17
cd postgresql-17.0
./configure --prefix=/usr/local/pg17
make
make install
(2)切换postgres用户并建新版pg数据目录
su postgres
cd /data
mkdir pg17
(3)初始化新版本pg
/usr/local/pg17/bin/initdb -D /data/pg17
(4)修改配置文件,端口改为5433
[postgres@postgres pg17]$ vi postgresql.conf
port = 5433