PostgreSQL 生产环境升级指南:pg_upgrade 快速完成版本升级!
前言
PostgreSQL 的版本号由主要版本号和次要版本号组成。例如,在 10.1 中,10 是主要版本,1 是次要版本。关于更多版本的规划,请参考 PostgreSQL 版本路线图。
版本号规则:
- PostgreSQL 10 及以后:版本号采用
X.Y形式(如10.1,11.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.4,10.7 → 11.2 - 不需要 pg_upgrade:
9.6.2 → 9.6.3,10.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.conf、postgresql.conf 或 postgresql.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 及以后:版本号…...
Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调
Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调 环境准备创建Python微调环境准备数据集准备模型文件 模型微调模型预测原始模型预测微调模型预测 使用unsloth,可以方便地对大模型进行微调。以微调DeepSeek-R1-Distill-Llama-8B为…...
JAVA面试常见题_基础部分_mybatis面试题
1、什么是 MyBatis? 答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。 2、讲下 MyBatis 的缓存答 :MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓存放在它的命名空间里,默认是不打…...
RISC-V汇编学习(一)—— 基础认识
最近这三年的工作时间大部分的工作,都是基于riscv的cpu和接口ip开发适配驱动,时不时的就要debug测试代码,面对很多都是汇编,所以也是整理下积累的一点点笔记,系列博客将总结下riscv相关的内容,一是给有需要…...
【Delphi】如何解决使用webView2时主界面置顶,而导致网页选择文件对话框被覆盖问题
一、问题描述: 在Delphi 中使用WebView2控件,如果预先把主界面置顶(Self.FormStyle : fsStayOnTop;),此时,如果在Web页面中有使用(<input type"file" id"fileInput" acc…...
基于POI的Excel下拉框自动搜索,包括数据验证的单列删除
目录 目标 例子 1.搜索下拉框页 2.数据源页 3.效果 代码以及注意事项 1.代码 2.注意事项 1.基于Excel的话,相当于加入了一个【数据验证】 2.代码中的一些方法说明 目标 期望在Excel利用代码创建具备自动搜索功能的下拉框 例子 1.搜索下拉框页 2.数据源…...
基金 word-->pdf图片模糊的解决方法
1. 首先需要Adobe或福昕等pdf阅读器。 2. word中 [文件]--[打印],其中打印机选择pdf阅读器,例如此处我选择福昕阅读器。 3. 选择 [打印机属性]--[编辑]--[图像],将所有的采样、压缩均设置为 关闭。点击[另存为],保存为 基金报告…...
React底层原理详解
React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解 在面试中介绍React底层原理时,需遵循逻辑清晰、层次分明、重点突出的原则,结合技术深度与实际应用场景。以下是结构化回答模板:…...
Word 插入图片会到文字底下解决方案
一、现象描述 正常情况下,我们插入图片都是这样的。 但有时突然会这样,插入的图片陷于文字底部。 二、网上解决方案 网上有教程说,修改图片布局选项,从嵌入型改成上下型环绕。改完之后确实有用,但是需要手动拖动图片…...
基于DeepSeek 的图生文最新算法 VLM-R1
目录 一、算法介绍 二 算法部署 三 模型下载 四 算法测试 五 可视化脚本 一、算法介绍 VLM-R1:稳定且可通用的 R1 风格大型视觉语言模型 自从 Deepseek-R1 推出以来,出现了许多专注于复制和改进它的作品。在这个项目中,我们提出了 VLM-R1,一种稳定且可通用的 R1 风格…...
Composer如何通过GitHub Personal Access Token安装私有包:完整教程
使用Composer安全管理您的PHP私有依赖包 一、前言 在PHP开发中,我们经常需要将内部工具包托管为私有仓库。传统的账号密码验证方式存在安全隐患,而GitHub Personal Access Token(PAT)提供了一种更安全的鉴权方案。本文将通过4个…...
postgresql postgis扩展相关
项目 下载地址 http://rpmfind.net/linux/rpm2html/search.php?queryprotobuf(x86-64) Postgis Index of /postgis/source/ proj4 Index of /proj/ geos Index of /geos/ libxml2 ftp://xmlsoft.org/libxml2/ Index of /sources Json-c Releases json-c/json-c G…...
基于Python Django的人脸识别上课考勤系统(附源码,部署)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
神经网络之RNN和LSTM(基于pytorch-api)
1.RNN 1.1简介 RNN用于处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是…...
leetcode第39题组合总和
原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以…...
【UI设计——视频播放界面分享】
视频播放界面设计分享 在本次设计分享中,带来一个视频播放界面的设计作品。 此界面采用了简洁直观的布局。顶部是导航栏,包含主页、播放、搜索框等常见功能,方便用户快速找到所需操作。搜索框旁输入 “萌宠成长记”,体现了对特定内…...
动态规划刷题
文章目录 动态规划三步问题题目解析代码 动态规划 1. 状态表示:dp[i],表示dp表中i下标位置的值 2. 状态转移方程:以i位置位置的状态,最近的一步来划分问题,比如可以将状态拆分成前状态来表示现状态,dp[i] …...
stm32week5
stm32学习 二.外设 14.串口发送数据包 数据包的定义: HEX数据包(以0xFF为包头,0xFE为包尾,实际上可自定义): 固定包长,含包头包尾可变包长,含包头包尾 对于数据中不会出现包头包尾的数据可以用可变包长…...
fastapi中的patch请求
目录 示例测试使用 curl 访问:使用 requests 访问:预期返回: 浏览器访问 示例 下面是一个使用 app.patch("") 的 FastAPI 示例,该示例实现了一个简单的用户信息更新 API。我们使用 pydantic 定义数据模型,并…...
系统架构设计师—计算机基础篇—计算机网络
文章目录 网络互联模型网络协议与标准应用层协议FTP协议TFTP协议 HTTP协议HTTPS协议 DHCP动态主机配置协议DNS协议迭代查询递归查询 传输层协议网络层协议IPV4协议IPV6协议IPV6数据报的目的地址IPV4到IPV6的过渡技术 网络设计分层设计接入层汇聚层核心层 网络布线综合布线系统工…...
openclaw 配置教程:本地安装、网关接入与模型 API 配置完整说明
如果你在折腾 openclaw 配置,通常会发现真正影响使用体验的,不是把程序装上去,而是后面的模型来源怎么接、网关怎么起、控制面板怎么进,以及默认模型如何切换。只要这些环节没有理顺,就算安装完成,后续也很…...
从硬件到代码:深入理解ARM中断向量表的工作原理与设计哲学
ARM中断向量表:从硬件设计到软件实现的深度解析 在嵌入式系统开发中,中断机制是处理器响应外部事件的核心机制之一。作为ARM架构中异常处理的基础设施,中断向量表的设计直接影响着系统的实时性和可靠性。本文将深入探讨ARM中断向量表的工作原…...
别再忍受小窗口了!手把手教你给Ubuntu虚拟机装VMware Tools实现完美全屏
告别局促视界:Ubuntu虚拟机全屏显示的终极解决方案 第一次在VMware里启动Ubuntu时,那个缩在屏幕一角的小窗口简直像被关在笼子里的鸟——明明有广阔的显示空间,却只能蜷缩着操作。拖动文件得来回滚动,阅读文档要不断放大ÿ…...
FocalNet目标检测、实例分割模型环境配置FocalNet目标检测、实例分割模型数据集调整FocalNet目标检测、实例分割模型代跑训练FocalNet目标检测、实例分割改进创新Focal
FocalNet目标检测、实例分割模型环境配置 FocalNet目标检测、实例分割模型数据集调整 FocalNet目标检测、实例分割模型代跑训练 FocalNet目标检测、实例分割改进创新 FocalNet环境配置:Windows、Ubuntu、Centos、Macos等系统环境,如果电脑拥有显卡&#…...
Vue3路由缓存优化指南:用keep-alive的include+max实现淘宝级页面保活
Vue3路由缓存优化实战:电商场景下的keep-alive高阶用法 电商平台的商品详情页与列表页频繁切换时,页面重载导致的性能损耗直接影响用户体验。去年双十一大促期间,某头部电商平台通过优化路由缓存策略,将页面切换速度提升了47%&…...
模型量化基础知识 - PTQ - 训练后量化
文章目录一、PTQ 是什么二、PTQ 的标准流程(五大步骤)✅ Step 0:准备 FP 模型(Baseline)✅ Step 1:插入量化节点(Quantization Simulation)✅ Step 2:校准(Ca…...
SEO_快速诊断并解决网站SEO问题的常见方法(164 )
快速诊断网站SEO问题的有效方法 在当今数字化时代,网站的SEO(搜索引擎优化)问题不仅关乎网站的流量,更直接影响到业务的发展。对于许多网站来说,SEO问题往往是隐藏在表面现象背后的复杂问题。因此,快速诊断…...
边缘检测算法选型指南:从Sobel到Canny的5个实际场景对比(含医疗/自动驾驶案例)
边缘检测算法实战选型:医疗影像与自动驾驶场景下的Sobel与Canny深度评测 在计算机视觉领域,边缘检测作为图像处理的基础环节,直接影响着后续特征提取和目标识别的准确性。面对医疗影像分析、自动驾驶感知等对精度和实时性要求极高的场景&…...
家庭知识库中心:OpenClaw+Qwen3.5-9B管理个人数字资产
家庭知识库中心:OpenClawQwen3.5-9B管理个人数字资产 1. 为什么需要家庭知识库 去年搬家时,我在整理纸质文件的过程中发现一个严重问题:孩子的疫苗接种记录、房产合同、医疗报告等重要文档分散在多个文件夹中,紧急情况下根本找不…...
PyTorch 2.8镜像惊艳案例:碳排放数据→双碳目标达成路径视频推演
PyTorch 2.8镜像惊艳案例:碳排放数据→双碳目标达成路径视频推演 1. 效果惊艳开场 想象一下,只需输入简单的碳排放数据,就能自动生成一段专业级的双碳目标达成路径推演视频。这不是科幻场景,而是我们基于PyTorch 2.8镜像实现的真…...
