Centos7操作系统下postgresql-14升级postgresql-16

1、创建临时安装包文件夹:

# 打开usr目录
cd /usr

# 在usr目录下创建tmptar文件夹
mkdir tmptar

# 打开tmptar文件夹 
cd tmptar

2、下载安装包、安装依赖包

# 下载数据库安装包,版本postgresql-16.9
wget https://ftp.postgresql.org/pub/source/v16.9/postgresql-16.9.tar.gz

# 安装数据库包之前需要先安装依赖包
yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake

3、解压、编译、安装、插件安装

# 执行解压(在tmptar目录下生成一个postgresql-16.9的目录)
tar zxvf postgresql-16.9.tar.gz

# 编译postgresql源码,安装
cd postgresql-16.9
./configure --prefix=/usr/pgsql-16
make && make install

# 插件安装
cd /contrib
make && make install


4、指定目录初始化数据库

# 在home目录下创建data目录
cd /home
mkdir pg16
cd pg16
mkdir data

# 赋于用户postgres对于data目录的权限
chown postgres:postgres data

# 执行数据库初始化
su - postgres -c "/usr/pgsql-16/bin/initdb -D /home/pg16/data" 

5、修改pg_hba.conf、postgresql.conf配置文件

# 打开编辑pg_hba.conf
vi /home/pg16/data/pg_hba.conf
# 在最后一行添加
host    all             all             0/0               md5

打开编辑postgresql.conf
vi /home/pg16/data/postgresql.conf

# 把 listen_addresses放开,值改为 *
# 把 下一行port = 5432放开

6、原有postgresql-14数据库备份

# 创建备份目录p14olddata
cd /home
mkdir p14olddata
chown postgres:postgres /home/p14olddata

# 执行以下备份命令(包含所有数据库、用户、角色等),备份文件也放在home目录下。
su - postgres
pg_dumpall -U postgres -f /home/p14olddata/dumpall_data.sql

# 备份完停止老库:
systemctl stop postgresql-14

7、版本兼容性校验、升级安装

# 新版本pg与旧版本兼容性校验--check(若校验失败则解决之后才能安装,一般情况下都是OK的) 
su - postgres
/usr/pgsql-16/bin/pg_upgrade --old-datadir /var/lib/pgsql/14/data --new-datadir /home/pg16/data --old-bindir /usr/pgsql-14/bin --new-bindir /usr/pgsql-16/bin --check

# check通过后安装命令:
/usr/pgsql-16/bin/pg_upgrade --old-datadir /var/lib/pgsql/14/data --new-datadir /home/pg16/data --old-bindir /usr/pgsql-14/bin --new-bindir /usr/pgsql-16/bin

8、创建 systemd 数据库启动服务配置postgresql-16.service

# 打开编辑
sudo nano /etc/systemd/system/postgresql-16.service

# 复制粘贴以下内容:
[Unit]
Description=PostgreSQL 16 database server
Documentation=https://www.postgresql.org/docs/16/static/
After=network.target

[Service]
User=postgres
Group=postgres
ExecStart=/usr/pgsql-16/bin/postgres -D /home/pg16/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
TimeoutSec=infinity
LimitNOFILE=65535
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 按 Ctrl + O(字母O)保存,再按回车
# 再按Ctrl + X退出编辑

# 重新加载启动服务,使配置生效
sudo systemctl daemon-reexec 
sudo systemctl daemon-reload 

9、配置环境变量.bash_profile

# 打开编辑bash_profile文件
vi ~/.bash_profile

# export PATH 前添加以下内容:
export LANG=en_US.UTF-8
export PS1="[\u@\h \W]\$ "
export PGPORT=5432
export PGDATA=/home/pg16/data
export PGHOME=/usr/pgsql-16
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
export DATE=`date +"%Y%m%d%H%M"`
export MANPATH=$PGHOME/share/man:$MANPATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres

10、启动postgresql-16

# 启动postgresql-16数据库服务
systemctl start postgresql-16

# 停止postgresql-16数据库服务 systemctl stop postgresql-16

# 查看数据库服务状态
systemctl status postgresql-16

# 重新收集统计信息
su - postgres
/home/pg16/data/bin/vacuumdb --all --analyze-in-stages

11、其它辅助命令(供安装过程中参考)

# 修改数据库postgres用户密码
sudo -u postgres /usr/pgsql-16/bin/postgres --single -D /home/pg16/data
ALTER USER postgres PASSWORD '新密码';

# 退出
\q 

# 查询服务安装情况
rpm -qa | grep postgresql14

# 查看服务日志
sudo journalctl -u postgresql-16

# 若systemctl status postgresql-16报下面错
Jul 01 17:48:42 dce-infra01 postgres[748331]: 2025-07-01 17:48:42.754 CST [748334] LOG:  invalid record length at 0/494C8D88: expected at least 24, got 0

# 解决方法
# 先停止服务:
sudo systemctl stop postgresql-16
# 重新归档数据库日志
su - postgres
/usr/local/pgsql/bin/pg_resetwal -f /home/pg16/data

# 若出现报错:
pg_resetwal: error: lock file "postmaster.pid" exists
pg_resetwal: hint: Is a server running?  If not, delete the lock file and try again.

# 解决方法
# 手动删除.pid文件:
rm /home/pg16/data/postmaster.pid,

# 再次执行
/usr/local/pgsql/bin/pg_resetwal -f /home/pg16/data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nbman2013

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值