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.其他报错

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

相关推荐
l1t3 小时前
一个postgresql奇怪慢查询现象的原因和解决
数据库·sql·postgresql·性能优化
Rainly20005 小时前
工作日志之postgresql实现分布式锁
数据库·分布式·postgresql
AC赳赳老秦6 小时前
财务数据智能解读:DeepSeek分析利润表生成异常波动原因报告
数据库·人工智能·postgresql·zookeeper·测试用例·时序数据库·deepseek
AI题库7 小时前
PostgreSQL 18 从新手到大师:实战指南 - 1.3 Docker环境搭建
数据库·docker·postgresql
l1t8 小时前
PostgreSQL Distinct On 关键字的用法
数据库·sql·postgresql
AI题库9 小时前
PostgreSQL 18 从新手到大师:实战指南 - 1.2 关系型数据库基础
数据库·postgresql
l1t1 天前
postgresql递归查询指定搜索顺序的方法
数据库·postgresql·dfs·递归·cte
男孩李1 天前
linux下如何执行postgres数据库的sql文件
数据库·sql·postgresql
AI题库1 天前
PostgreSQL 18 从新手到大师:实战指南 - 1.1 PostgreSQL 18简介
数据库·postgresql
king_harry1 天前
PostgreSQL WAL 原理剖析、日志堆积治理与流复制监控
数据库·postgresql·wal·流复制