当前位置: 首页 > 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 使用技巧!

相关文章:

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

前言 PostgreSQL 的版本号由主要版本号和次要版本号组成。例如,在 10.1 中,10 是主要版本,1 是次要版本。关于更多版本的规划,请参考 PostgreSQL 版本路线图。 版本号规则: PostgreSQL 10 及以后:版本号…...

UniApp 中封装 HTTP 请求与 Token 管理(附Demo)

目录 1. 基本知识2. Demo3. 拓展 1. 基本知识 从实战代码中学习,上述实战代码来源:芋道源码/yudao-mall-uniapp 该代码中,通过自定义 request 函数对 HTTP 请求进行了统一管理,并且结合了 Token 认证机制 请求封装原理&#xff…...

@update 的常见用法 Vue.js

在 Vue.js 中&#xff0c;update 是一个事件监听器&#xff0c;通常用于监听自定义组件或某些 Vue 原生组件&#xff08;如 <input> 或自定义组件&#xff09;的更新事件。它并不是 Vue 的核心 API&#xff0c;而是一种约定俗成的命名方式&#xff0c;用于处理组件内部状…...

基于开源库编写MQTT通讯

目录 1. MQTT是什么&#xff1f;2. 开发交互UI3. 服务器核心代码4. 客户端核心代码5. 消息订阅与发布6. 通讯测试7. MQTT与PLC通讯最后. 核心总结 1. MQTT是什么&#xff1f; MQTT&#xff08;Message Queuing Terlemetry Transport&#xff09;消息队列遥测协议&#xff1b;是…...

基于springboot+vue美食与健康分享推广网站

目录 项目介绍 图片展示 运行环境 项目介绍 管理员&#xff1a; 个人中心&#xff1a;修改个人信息、修改密码 美食分类管理&#xff1a;增删改查美食分类 商品分类管理&#xff1a;增删改查商品分类 热门美事管理&#xff1a;增删改查热门美食、以及查看评论、预览视频 在线…...

React面试葵花宝典之二

36.Fiber的更新机制 React Fiber 更新机制详解 React Fiber 是 React 16 引入的核心架构重构&#xff0c;旨在解决可中断渲染和优先级调度问题&#xff0c;提升复杂应用的流畅性。其核心思想是将渲染过程拆分为可控制的工作单元&#xff0c;实现更细粒度的任务管理。以下是其…...

计算机毕业设计SpringBoot+Vue.js装饰工程管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

从波士顿动力到Figure AI:探寻人工智能驱动的机器人智能化

一、引言 1.1 研究背景与意义 在科技飞速发展的当下,机器人智能化已成为全球科技竞争的关键领域,深刻影响着人类社会的生产与生活方式。从工业制造到日常生活服务,从医疗保健到探索未知领域,机器人正逐步渗透进各个行业,展现出巨大的发展潜力与应用价值。其智能化水平的…...

华为 VRP 系统简介配置SSH,TELNET远程登录

华为 VRP 系统简介&配置TELNET远程登录 1.华为 VRP 系统概述 1.1 什么是 VRP VRP&#xff08;Versatile Routing Platform 华为数通设备操作系统&#xff09;是华为公司数据通信产品的通用操作系统平台&#xff0c;从低端到核心的全系列路由器、以太网交换机、业务网关等…...

Token相关设计

文章目录 1. 双Token 机制概述1.1 访问令牌&#xff08;Access Token&#xff09;1.2 刷新令牌&#xff08;Refresh Token&#xff09; 2. 双Token 认证流程3. Spring Boot 具体实现3.1 生成 Token&#xff08;使用 JWT&#xff09;3.2 解析 Token3.3 登录接口&#xff08;返回…...

【计算机网络入门】初学计算机网络(九)

目录 1.令牌传递协议 2. 局域网&IEEE802 2.1 局域网基本概念和体系结构 3. 以太网&IEEE802.3 3.1 MAC层标准 3.1.1 以太网V2标准 ​编辑 3.2 单播广播 3.3 冲突域广播域 4. 虚拟局域网VLAN 1.令牌传递协议 先回顾一下令牌环网技术&#xff0c;多个主机形成…...

xss笔记与打靶(更新中)

这个文章好 https://blog.csdn.net/huangyongkang666/article/details/123624164?fromshareblogdetail&sharetypeblogdetail&sharerId123624164&sharereferPC&sharesource2401_88818565&sharefromfrom_link 什么是xss XSS&#xff08;跨站脚本攻击&…...

Lumoz Chain正式上线:AI 时代的新算力破局者

新的叙事和技术突破永远是推动行业前行的核心动力。当下&#xff0c;AI Agent无疑是最炙手可热的赛道之一。 当加密世界将目光投向AI领域时&#xff0c;大多数项目仍停留在以AI为工具或应用场景的层面&#xff0c;试图通过集成AI模型或优化链上功能来吸引用户。然而&#xff0…...

sql调优:优化响应时间(优化sql) ; 优化吞吐量

Sql性能调优的目的 1.优化响应时间>>优化sql 经过调优后&#xff0c;执行查询、更新等操作的时候&#xff0c;数据库的反应速度更快&#xff0c;花费的时间更少。 2.优化吞吐量 即“并发”, 就是“同时处理请求”的能力。 优化sql 尽量将多条SQL语句压缩到一句>…...

Linux常见操作命令

Linux系统拥有丰富的命令行工具&#xff0c;通过这些命令可以高效地完成各种系统管理和日常操作任务。以下是一些常见的Linux操作命令&#xff1a; 文件和目录操作&#xff1a; - 创建目录&#xff1a;使用 mkdir 命令&#xff0c;例如 mkdir test 可以创建名为 test 的目录。如…...

2020最新Java面试题

2020最新Java面试题 序Java基础JVMRedis 序 研发了这么多年&#xff0c;每天都在搬砖&#xff0c;斗转星移&#xff0c;从一个被面试者&#xff0c;成为了一个面试者。总感觉自己在面试的时候提出的问题没有一个由浅入深的感觉&#xff0c;总是东一个问题&#xff0c;西一个…...

递归遍历目录 和 普通文件的复制 [Java EE]

递归遍历目录 首先 先列出当前目录所包含的内容 File[] files currentDir.listFiles();if (files null || files.length 0) {// 若是空目录或非法目录, 则直接返回return;} 然后 遍历列出的文件, 分情况两种讨论 for (File f: files) {// 加个日志, 方便查看程序执行情…...

批量设置 Word 样式,如字体信息、段落距离、行距、页边距等信息

在 Word 文档中&#xff0c;我们可以做各种样式的处理。比如设置 Word 文档的字体样式、设置 Word 文档的段落样式以及设置 Word 文档的页面样式。我们通常可以在 Office 中完成这些操作&#xff0c;相信绝大部分场景我们也是这样完成的。但是如果我们手上有 1000 个 Word 文档…...

搜索赋能:大型语言模型的知识增强与智能提升

引言 近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;取得了显著的进展&#xff0c;并在各个领域展现出强大的能力。然而&#xff0c;LLM也存在一些局限性&#xff0c;尤其是在知识库方面。由于训练数据的局限性&#xff0c;LLM无法获取最新的知识&#xff0c;也无…...

c++ 预处理器和iostream 文件

在C中&#xff0c;预处理器和<iostream>头文件各自扮演关键角色&#xff0c;二者协同工作以实现程序的输入输出功能。以下是它们的详细关系和作用&#xff1a; 1. 预处理器的作用 处理预处理指令&#xff1a;预处理器在编译前执行&#xff0c;处理所有以#开头的指令&…...

ViewPager2跟ViewPager的区别

1都是用来实现页面切换的&#xff0c;ViewPager2是ViewPager的增强版和升级版&#xff0c;ViewPager2是基于RecyclerView实现&#xff0c;可以支持横向和竖向页面切换&#xff0c;只需在布局文件添加一个android:orientation"vertical"即可&#xff0c;ViewPager只支…...

win本地vscode通过代理远程链接linux服务器

时间&#xff1a;2025.2.28 1. win本地下载nmap.exe nmap官网 https://nmap.org/或者 https://nmap.org/download#windows下载win版本并安装。 2. vscode插件Remote-SSH 插件下载Remote-SSH 3. 配置 按照图中顺序配置ssh 1.点击左侧工具栏的“小电视”图标 2.点击ssh的…...

C++(蓝桥杯常考点)

前言&#xff1a;这个是针对于蓝桥杯竞赛常考的C内容&#xff0c;容器这些等下棋期再讲 C 在DEVC中注释和取消注释的方法&#xff1a;ctrl/ ASCII值&#xff08;常用的&#xff09;&#xff1a; A-Z:65-90 a-z:97-122 0-9:48-57 换行/n:10科学计数法&#xff1a;eg&#xff1a…...

蓝桥杯2025模拟三(01字符串)

【问题描述】 如果一个字符串中只包含字符 0 和字符 1&#xff0c;则称为一个 01 串&#xff08;包含全为 0 的串和全为 1 的串&#xff09;。 请问有多少个长度为 24 的 01 串&#xff0c;满足任意 5 个连续的位置中不超过 3 个位置的值为 1 。 【答案提交】 这是一道结果填空…...

EVOAGENT: Towards Automatic Multi-Agent Generation via Evolutionary Algorithms

题目 EVOAGENT:通过进化算法实现多智能体自动生成 论文地址&#xff1a;https://openreview.net/pdf?id05bBTmRj9s 项目地址&#xff1a;https://evo-agent.github.io/ 摘要 强大的大型语言模型(LLM)的出现激发了一种新的趋势&#xff0c;即构建基于LLM的自治代理来解决复杂的…...

Linux虚拟机网络配置-桥接网络配置

简介 本文档旨在指导用户如何在虚拟环境中配置Linux系统的桥接网络&#xff0c;以实现虚拟机与物理主机以及外部网络的直接通信。桥接网络允许虚拟机如同一台独立的物理机一样直接连接到物理网络&#xff0c;从而可以被分配一个独立的IP地址&#xff0c;并能够与网络中的其他设…...

使用Docker搭建Oracle Database 23ai Free并扩展MAX_STRING_SIZE的完整指南

使用Docker搭建Oracle Database 23ai Free并扩展MAX_STRING_SIZE的完整指南 前言环境准备目录创建启动Docker容器 数据库配置修改进入容器启动SQL*PlusPDB操作与字符串扩展设置配置验证 管理员用户创建注意事项总结 前言 本文将详细讲解在Docker环境中配置Oracle Database 23a…...

【UI设计——视频播放界面分享】

视频播放界面设计分享 在本次设计分享中&#xff0c;带来一个视频播放界面的设计作品。 此界面采用了简洁直观的布局。顶部是导航栏&#xff0c;包含主页、播放、搜索框等常见功能&#xff0c;方便用户快速找到所需操作。搜索框旁输入 “萌宠成长记”&#xff0c;体现了对特定内…...

SyntaxError: positional argument follows keyword argument

命令行里面日常练手爬虫不注意遇到的问题&#xff0c;报错说参数位置不正确 修改代码后&#xff0c;运行如下图&#xff1a; 结果&#xff1a; 希望各位也能顺利解决问题&#xff0c;祝你好运&#xff01;...

【JAVA面试题】== 和 equals() 的区别与使用场景

在 Java 面试中&#xff0c; 和 equals() 的区别是一个高频考点。理解它们的底层原理和使用场景&#xff0c;对于掌握 Java 基础知识至关重要。本文将从 基本概念、底层实现 和 实际应用 三个方面&#xff0c;深入解析 和 equals() 的区别。 1. 基本概念 1.1 运算符 作用&a…...