当前位置: 首页 > article >正文

PostgreSQL 生产环境升级指南:pg_upgrade 快速完成版本升级!

前言

PostgreSQL 的版本号由主要版本号次要版本号组成。例如,在 10.1 中,10 是主要版本,1 是次要版本。关于更多版本的规划,请参考 PostgreSQL 版本路线图。

版本号规则:

  • PostgreSQL 10 及以后:版本号采用 X.Y 形式(如 10.111.2),其中 X 为主要版本,Y 为次要版本。
  • PostgreSQL 10 之前:版本号采用 X.Y.Z 形式(如 9.5.3),其中 X.Y 为主要版本(如 9.5),Z 为次要版本(如 3)。

升级规则:

  • 次要版本升级(如 10.1 → 10.6,9.5.3 → 9.5.6) :数据存储格式保持不变,可直接替换可执行文件并重启(例如直接下载替换 /usr/local/pgsql/bin 下的 postgres 相关二进制文件)。
  • 主要版本升级(如 9.5 → 9.6,10 → 11) :数据格式可能变化,通常需要数据导出/导入,但 pg_upgrade 可简化这一过程。

pg_upgrade

pg_upgrade(原 pg_migrator)用于快速升级 PostgreSQL 主要版本,避免传统数据导出/导入的繁琐操作。例如:

  • 支持升级9.5.8 → 9.6.410.7 → 11.2
  • 不需要 pg_upgrade9.6.2 → 9.6.310.1 → 10.2(仅次要版本升级)

工作原理:

  • 主要版本升级可能更改系统表结构,但通常不会改变数据存储格式
  • pg_upgrade 通过创建新系统表并重用旧用户数据,实现高效升级。
  • 若未来版本彻底更改数据存储格式,则 pg_upgrade 可能无法支持该升级。

兼容性要求:

  • 确保旧版与新版二进制兼容(如 32/64 位设置)。
  • 扩展插件需自行检查是否兼容,pg_upgrade 无法自动验证。

支持范围:
pg_upgrade 可用于 PostgreSQL 8.4 及以上版本,包括 beta 版本。

升级流程

真实生产环境 pgsql 9.3 版本升级到 pgsql 10 升级操作流程记录。

安装新版本并初始化

$ #/usr/pgsql-10/bin/postgresql-10-setup initdb

停止旧版本的数据库

$ kill -INT `head -1 /var/lib/pgsql/9.3/data/postmaster.pid`

切换至postgres用户

$ su - postgres

pg_upgrade 检查数据库兼容性

$ /usr/pgsql-10/bin/pg_upgrade \
  -b /usr/pgsql-9.3/bin/ \
  -B /usr/pgsql-10/bin/ \
  -d /var/lib/pgsql/9.3/data/ \
  -D /var/lib/pgsql/10/data/ \
  -k -c

如果检查失败,会看到 Failure 或 Warning 相关信息,可能的错误包括:

  • 数据类型不兼容
  • 外部插件或扩展不兼容
  • 索引、表、用户权限问题
  • 不同 PostgreSQL 版本间的 OID 变化

如果 pg_upgrade 检查没有报错(检查项 ok),就可以继续执行实际升级命令。

pg_upgrade参数说明:

-b 旧的 PostgreSQL 可执行目录;
-B 新的 PostgreSQL 可执行目录;
-d 旧的数据库集群配置目录;
-D 新的数据库集群配置目录;
-c 仅检查集群,不要更改任何数据
-k 使用硬链接而不是将文件复制到新集群

pg_upgrade 执行升级

$ /usr/pgsql-10/bin/pg_upgrade \
  -b /usr/pgsql-9.3/bin/ \
  -B /usr/pgsql-10/bin/ \
  -d /var/lib/pgsql/9.3/data/ \
  -D /var/lib/pgsql/10/data/

升级完毕退出 postgres 用户

$ exit

调整配置文件

如果 pg_hba.confpostgresql.confpostgresql.auto.conf 进行了修改,请手动调整新版本的配置。

启动新版本数据库

$ systemctl enable postgresql-10.service
$ systemctl start postgresql-10.service
# 或重启服务
# systemctl restart postgresql-10.service

检查 PostgreSQL 版本

$ psql --version

总结

通过本文中的详细步骤,可以轻松实现 PostgreSQL 的主要版本升级,利用 pg_upgrade 工具,无需手动导出和导入数据,大大简化了升级过程。

在进行生产环境的 PostgreSQL 升级时,确保平稳过渡是至关重要的。升级过程中可能会出现许多潜在问题,因此建议通过搭建测试环境来模拟升级过程,并在确认一切正常后再执行生产环境的升级!

希望这篇文章对你有帮助!如果你有任何疑问,欢迎在评论区留言,我们一起探讨更多 PostgreSQL 使用技巧!


http://www.kler.cn/a/568725.html

相关文章:

  • 入门大模型的学习路线是什么?
  • 十一、Spring Boot:使用JWT实现用户认证深度解析
  • All in One: Multi-Task Prompting for Graph Neural Networks学习笔记
  • 【面试】Java面试频繁问到的题最新整理(附答案)
  • [Lc滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数
  • 火山引擎 DeepSeek R1 API 使用小白教程
  • 使用 ASP.NET Core 创建和下载 zip 文件
  • 剖析RabbitMQ消息可靠投递
  • 算法day4 dfs搜索2题
  • Flask-Restful
  • APP爬取:基于Appium的App数据爬取实战详解
  • 苹果产品自助网址
  • 【考试大纲】高级网络规划设计师考试大纲
  • 各章节详细总结与 Vue 学习收尾
  • Vscode 便用快捷键设置教程
  • 【赵渝强老师】Kafka消息的消费模式
  • 常用的api测试软件
  • 飞算JavaAI编程工具集成到idea中
  • 基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)
  • Linux-进程与信号