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

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.lryc.cn/news/545555.html

相关文章:

  • Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调
  • JAVA面试常见题_基础部分_mybatis面试题
  • RISC-V汇编学习(一)—— 基础认识
  • 【Delphi】如何解决使用webView2时主界面置顶,而导致网页选择文件对话框被覆盖问题
  • 基于POI的Excel下拉框自动搜索,包括数据验证的单列删除
  • 基金 word-->pdf图片模糊的解决方法
  • React底层原理详解
  • Word 插入图片会到文字底下解决方案
  • 基于DeepSeek 的图生文最新算法 VLM-R1
  • Composer如何通过GitHub Personal Access Token安装私有包:完整教程
  • postgresql postgis扩展相关
  • 基于Python Django的人脸识别上课考勤系统(附源码,部署)
  • 神经网络之RNN和LSTM(基于pytorch-api)
  • leetcode第39题组合总和
  • 【UI设计——视频播放界面分享】
  • 动态规划刷题
  • stm32week5
  • fastapi中的patch请求
  • 系统架构设计师—计算机基础篇—计算机网络
  • MATLAB中asManyOfPattern函数用法
  • Kafka面试题及原理
  • Grok 3 AI 角色扮演提示词 化身顶级设计师
  • 从零开始设计一个完整的网站:HTML、CSS、PHP、MySQL 和 JavaScript 实战教程
  • CSS 对齐:深入理解与技巧实践
  • oracle游标为什么没有共享,统计一下原因
  • IDEA中.gitignore未忽略指定文件的问题排查与解决
  • 通往 AI 之路:Python 机器学习入门-语法基础
  • 形象生动讲解Linux 虚拟化 I/O
  • 6. Nginx 动静分离配置案例(附有详细说明+配图)
  • 数据集笔记:新加坡停车费