pgsql 版本升级和数据迁移(编译版)

最近给pgsql从16.0升级到16.4,有挺多细节

1.关闭pgsql

为了保证数据一致性和过渡平稳,还是需要暂停pgsql。

bash 复制代码
systemctl stop pgsql

2.备份现有数据

需要切换到pgsql的用户,通常用root是不行的

bash 复制代码
pg_dumpall > /xxx/xxx/backup.sql

3.重命名程序目录和数据目录(重要)

如果是默认的位置,那么命令如下

bash 复制代码
mv /usr/local/pgsql /usr/local/pgsql0
bash 复制代码
mv /var/pgsqldata /var/pgsqldata0

一定要迁移到其他目录,而不是直接覆盖,因为很容易搞错。

4.编译安装新版

编译安装的教程:链接

到make && make install就编译好了,下面是迁移数据
注意插件也需要重新安装

安装插件!!!

5.新版本的数据初始化

bash 复制代码
mkdir /var/pgsqldata
bash 复制代码
chown postgres:postgres /var/pgsqldata
bash 复制代码
chmod -R 750 /var/pgsqldata

切换到postgres,然后再进行初始化

bash 复制代码
su postgres
bash 复制代码
cd /var/pgsqldata
bash 复制代码
initdb

初始化之后不需要启动,如果不是初始化默认的/var/pgsqldata,可以适用指定目录initdb -D /xxx/xxx

6.升级数据目录(重要)

需要切换到postgres用户,还有进入可执行的目录,比如/tmp

bash 复制代码
cd /tmp
bash 复制代码
/usr/local/pgsql/bin/pg_upgrade -b /usr/local/pgsql0/bin -B /usr/local/pgsql/bin -d /var/pgsqldata0 -D /var/pgsqldata

/usr/local/pgsql/bin/pg_upgrade:这是 pg_upgrade 可执行文件的路径。新版本 PostgreSQL 的 pg_upgrade 工具的位置,因为它包含最新的升级工具代码

-b /usr/local/pgsql0/bin:

复制代码
旧版本 PostgreSQL 的 bin 目录路径。
这个目录包含旧版本的 PostgreSQL 二进制文件(如 postgres、pg_ctl 等),pg_upgrade 需要知道旧二进制文件的位置以便与新版本进行兼容性检查。

-B /usr/local/pgsql/bin:

复制代码
新版本 PostgreSQL 的 bin 目录路径。
这个目录包含新安装的 PostgreSQL 二进制文件。指定该路径以便 pg_upgrade 使用新版本的二进制文件进行升级。

-d /var/pgsqldata0:

复制代码
旧版本 PostgreSQL 的数据目录路径。
此目录存储旧版本数据库的实际数据文件和元数据。pg_upgrade 将读取这些数据并将其迁移到新版本中。

-D /var/pgsqldata:

复制代码
新版本 PostgreSQL 的数据目录路径。
这个目录将用于存储升级后的数据。pg_upgrade 会将旧数据目录中的数据迁移到这个新目录中,确保新版本 PostgreSQL 启动时可以直接使用这些数据。

一切正常后,会看到类似下面的提示,upgrade complete

7.修改pg_hba.conf文件和postgresql.conf

将旧的pg_hba.conf和postgresql.conf文件内容(我这里是/var/pgsqldata0)修改到新的数据目录里面去

8.启动pgsql

bash 复制代码
systemctl start pgsql

二、容易出现的报错和处理

1.新目录没有初始化

虽然是要从旧目录迁移数据,但是还是要初始化新版的数据目录

2.数据目录权限

无论是新的还是旧的目录,都需要700或750的权限

bash 复制代码
chmod -R 750 /var/pgsqldata
bash 复制代码
chmod -R 750 /var/pgsqldata0

3.没有关闭旧的程序

如果你不止开启了一个实例(多开pgsql),需要注意,否则无法正常进行

另外如果多个实例,有多个数据目录,则除了编译安装外,其他的数据迁移目录都要这样来一遍

4.插件没有安装

插件没有安装的情况是,是无法顺利迁移的,需要装的都要装

5.其他报错

如果有其他报错,通常会有个日志文件,读取其中就可以知道为什么迁移错误了

相关推荐
IvorySQL1 天前
PG 技术日报|2026-07-03
数据库·postgresql·开源
甘露s1 天前
为什么 GIS 系统更青睐 PostgreSQL?
数据库·postgresql
脑子进水养啥鱼?2 天前
PostgreSQL timescaledb
数据库·postgresql
梦想的颜色4 天前
硬核实践:使用 Docker 部署生产级 PostgreSQL
运维·docker·postgresql·docker-compose·docker命令·docker安装数据库
smallyoung4 天前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql
秉承初心19 天前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
IvorySQL19 天前
PostgreSQL 技术日报 (6月15日)|PG19 性能优化推进,POSETTE 大会倒计时 2 天
数据库·人工智能·postgresql·开源
IvorySQL19 天前
PostgreSQL 技术日报 (6月16日)|Neon 自动化再进一步,逻辑复制冲突日志迎来 v50 更新
数据库·postgresql·自动化
倒流时光三十年19 天前
PostgreSQL 聊一下索引和排序规则
postgresql
睡不醒男孩03082320 天前
PostgreSQL 数据库运维转型:从传统模式到 CLup 平台的 25 个核心 FAQ
运维·数据库·postgresql