实验目标:
从pg15升级到pg16,自行搭建环境
实验步骤:
查看当前版本为15,然后停止服务:
pg_ctl -V

检查15中已经存在的数据

查看原数据库编译时的参数,新安装的数据库也需要添加相应的参数,防止迁移失败
pg_config | grep CONFIGURE
CONFIGURE = '--prefix=/pgccc/pgserver' '--with-blocksize=32' '--with-openssl'

安装pg16依赖包
yum install -y libicu-devel

安装PG16:
tar -zxvf postgresql-16.4.tar.gz
cd postgresql-16.4
./configure --with-blocksize=32 --with-openssl
# 如果指定了pg16的安装地址,需要将后面/usr/local/pgsql地址替换为新的安装地址:
mkdir /pgccc/pgserver16
./configure
--prefix=/pgccc/pgserver16
--with-blocksize=32 --with-openssl

make && make install

创建数据目录
mkdir -p /pgccc/pgdata16
chown postgres.postgres /pgccc/pgdata16/

加权限,防止升级时报错
chmod -R 777 /usr/local/pgsql/

su - postgres
cd /usr/local/pgsql/bin/
# 查看版本是否为16
./pg_ctl -V

初始化16数据库
./initdb -D /pgccc/pgdata16/

启动并登录16,验证正常
./pg_ctl start -D /pgccc/pgdata16/

./psql

先加上-c check一下,看看是否有报错:
./pg_upgrade -c -b /pgccc/pgserver/bin/ -B
/usr/local/pgsql/bin/ -d /pgccc/pgdata/ -D /pgccc/pgdata16/ -j 4
如果以前的PG15实在安装了扩展,则需要在PG16上安装相应的扩展后再进行升级,否则会提示升级检查错误,如下错误信息:

安装自带扩展:
cd ~/postgresql-16.4/contrib/
make && make install
安装故障修改时装的扩展,如果原PG15不存在可不安装:
select * from pg_available_extensions where name like
'pg_dirtyread';
\dx
其中pg_dirtyread扩展需要在PG16上安装2.6版本:
cd /root/postgresql-15.8/contrib/
wget https://github.com/df7cb/pg_dirtyread/archive/refs/tags/2.6.tar.gz
tar -zxvf pg_dirtyread-2.6.tar.gz
chmod -R 777 pg_dirtyread-2.6
cd pg_dirtyread-2.6
vim Makefile # 修改路径
PG_CONFIG = /usr/local/pgsql/bin/pg_config
修改Makefile
PG_CONFIG = /pgccc/pgserver/bin/pg_config
make
make install
./psql
create extension pg_dirtyread ;

停止16实例后进行数据升级:
./pg_ctl stop -D /pgccc/pgdata16/

./pg_upgrade -c -b /pgccc/pgserver/bin/ -B
/usr/local/pgsql/bin/ -d /pgccc/pgdata/ -D /pgccc/pgdata16/ -j 4

升级成功

./pg_ctl start -D /pgccc/pgdata16/

检查升级是否正常
./psql

进行后续工作
./vacuumdb --all --analyze-in-stages

./delete_old_cluster.sh
修改变量
vim ~/.bash_profile
修改以下内容
export PGHOME=/usr/local/pgsql
export PGDATA=/pgccc/pgdata16
退出postgres用户后重新进入,即可默认使用16版本的相关工具了
最后,PG15升16完成




