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

相关文章:

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时主界面置顶,而导致网页选择文件对话框被覆盖问题

一、问题描述&#xff1a; 在Delphi 中使用WebView2控件&#xff0c;如果预先把主界面置顶&#xff08;Self.FormStyle : fsStayOnTop;&#xff09;&#xff0c;此时&#xff0c;如果在Web页面中有使用&#xff08;<input type"file" id"fileInput" acc…...

基于POI的Excel下拉框自动搜索,包括数据验证的单列删除

目录 目标 例子 1.搜索下拉框页 2.数据源页 3.效果 代码以及注意事项 1.代码 2.注意事项 1.基于Excel的话&#xff0c;相当于加入了一个【数据验证】 2.代码中的一些方法说明 目标 期望在Excel利用代码创建具备自动搜索功能的下拉框 例子 1.搜索下拉框页 2.数据源…...

基金 word-->pdf图片模糊的解决方法

1. 首先需要Adobe或福昕等pdf阅读器。 2. word中 [文件]--[打印]&#xff0c;其中打印机选择pdf阅读器&#xff0c;例如此处我选择福昕阅读器。 3. 选择 [打印机属性]--[编辑]--[图像]&#xff0c;将所有的采样、压缩均设置为 关闭。点击[另存为]&#xff0c;保存为 基金报告…...

React底层原理详解

React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解 在面试中介绍React底层原理时&#xff0c;需遵循逻辑清晰、层次分明、重点突出的原则&#xff0c;结合技术深度与实际应用场景。以下是结构化回答模板&#xff1a;…...

Word 插入图片会到文字底下解决方案

一、现象描述 正常情况下&#xff0c;我们插入图片都是这样的。 但有时突然会这样&#xff0c;插入的图片陷于文字底部。 二、网上解决方案 网上有教程说&#xff0c;修改图片布局选项&#xff0c;从嵌入型改成上下型环绕。改完之后确实有用&#xff0c;但是需要手动拖动图片…...

基于DeepSeek 的图生文最新算法 VLM-R1

目录 一、算法介绍 二 算法部署 三 模型下载 四 算法测试 五 可视化脚本 一、算法介绍 VLM-R1:稳定且可通用的 R1 风格大型视觉语言模型 自从 Deepseek-R1 推出以来,出现了许多专注于复制和改进它的作品。在这个项目中,我们提出了 VLM-R1,一种稳定且可通用的 R1 风格…...

Composer如何通过GitHub Personal Access Token安装私有包:完整教程

使用Composer安全管理您的PHP私有依赖包 一、前言 在PHP开发中&#xff0c;我们经常需要将内部工具包托管为私有仓库。传统的账号密码验证方式存在安全隐患&#xff0c;而GitHub Personal Access Token&#xff08;PAT&#xff09;提供了一种更安全的鉴权方案。本文将通过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的人脸识别上课考勤系统(附源码,部署)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

神经网络之RNN和LSTM(基于pytorch-api)

1.RNN 1.1简介 RNN用于处理序列数据。在传统的神经网络模型中&#xff0c;是从输入层到隐含层再到输出层&#xff0c;层与层之间是全连接的&#xff0c;每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如&#xff0c;你要预测句子的下一个单词是…...

leetcode第39题组合总和

原题出于leetcode第39题https://leetcode.cn/problems/combination-sum/description/题目如下&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以…...

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

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

动态规划刷题

文章目录 动态规划三步问题题目解析代码 动态规划 1. 状态表示&#xff1a;dp[i]&#xff0c;表示dp表中i下标位置的值 2. 状态转移方程&#xff1a;以i位置位置的状态&#xff0c;最近的一步来划分问题&#xff0c;比如可以将状态拆分成前状态来表示现状态&#xff0c;dp[i] …...

stm32week5

stm32学习 二.外设 14.串口发送数据包 数据包的定义&#xff1a; HEX数据包(以0xFF为包头&#xff0c;0xFE为包尾&#xff0c;实际上可自定义)&#xff1a; 固定包长&#xff0c;含包头包尾可变包长&#xff0c;含包头包尾 对于数据中不会出现包头包尾的数据可以用可变包长…...

fastapi中的patch请求

目录 示例测试使用 curl 访问&#xff1a;使用 requests 访问&#xff1a;预期返回&#xff1a; 浏览器访问 示例 下面是一个使用 app.patch("") 的 FastAPI 示例&#xff0c;该示例实现了一个简单的用户信息更新 API。我们使用 pydantic 定义数据模型&#xff0c;并…...

系统架构设计师—计算机基础篇—计算机网络

文章目录 网络互联模型网络协议与标准应用层协议FTP协议TFTP协议 HTTP协议HTTPS协议 DHCP动态主机配置协议DNS协议迭代查询递归查询 传输层协议网络层协议IPV4协议IPV6协议IPV6数据报的目的地址IPV4到IPV6的过渡技术 网络设计分层设计接入层汇聚层核心层 网络布线综合布线系统工…...

科研创作提质增效|依托 PaperXie 智能写作,高效完成期刊论文全流程创作

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 一、引言 学术研究领域中&#xff0c;期刊论文是展现科研成果、完成学业考核、学术成果发表的核心载体。…...

2026年国内酒吧管理系统有哪些?15款软件功能与适用场景

国内酒馆市场竞争摆在那里&#xff0c;靠手工记账和人盯人管理&#xff0c;越来越吃力。有行业统计显示&#xff0c;用了专业管理系统之后&#xff0c;酒吧的库存损耗平均能降18%&#xff0c;会员复购率提升25%以上。这笔账算下来&#xff0c;系统不是多出来的开支&#xff0c;…...

手把手教你用USB ISP下载器给Arduino Nano烧写Bootloader(含ProgISP软件详细配置)

手把手教你用USB ISP下载器为Arduino Nano烧录Bootloader 当你拿到一块全新的Arduino Nano开发板&#xff0c;或是遇到程序无法上传的"变砖"情况时&#xff0c;很可能需要重新烧写Bootloader。Bootloader是存储在微控制器中的一小段特殊程序&#xff0c;它负责与Ard…...

LRCGET:如何一键批量下载本地音乐歌词的终极指南

LRCGET&#xff1a;如何一键批量下载本地音乐歌词的终极指南 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否厌倦了为每一首本地音乐手动寻找歌词…...

免费开源鼠标连点器:5分钟上手跨平台自动化点击完整指南

免费开源鼠标连点器&#xff1a;5分钟上手跨平台自动化点击完整指南 【免费下载链接】MouseClick &#x1f5b1;️ MouseClick &#x1f5b1;️ 是一款功能强大的鼠标连点器和管理工具&#xff0c;采用 QT Widget 开发 &#xff0c;具备跨平台兼容性 。软件界面美观 &#xff0…...

Qt5 super module多媒体模块详解:音频、视频、3D图形处理技术

Qt5 super module多媒体模块详解&#xff1a;音频、视频、3D图形处理技术 【免费下载链接】qt5 Qt5 super module 项目地址: https://gitcode.com/gh_mirrors/qt/qt5 Qt5 super module是一个功能强大的跨平台应用开发框架&#xff0c;其中的多媒体模块为开发者提供了全面…...

千问 LeetCode 2543. 判断一个点是否可以到达 Java实现

这道题的核心思路是从终点反向推导回起点&#xff0c;并利用最大公约数&#xff08;GCD&#xff09; 的性质来判定。核心思路从 (1, 1) 正向推导到 (targetX, targetY) 路径太多&#xff0c;不好下手。我们反过来想&#xff1a;从 (targetX, targetY) 能否通过逆操作回到 (1, 1…...

《流畅的Python》读书笔记07(补充03): 对象引用、可变性和垃圾回收 - 深复制循环引用内存安全机制解析

Python的copy.deepcopy()函数在处理循环引用时&#xff0c;通过内部的备忘录&#xff08;memo&#xff09;字典机制来打破无限递归&#xff0c;确保复制过程能够正确终止。这个memo字典本身的设计就考虑了内存管理的安全性&#xff0c;在正常情况下不会导致内存泄漏。其核心机制…...

Windows右键菜单终极优化指南:用ContextMenuManager让你的右键菜单秒开如飞

Windows右键菜单终极优化指南&#xff1a;用ContextMenuManager让你的右键菜单秒开如飞 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否经历过这样的烦恼&…...

Python性能优化实战:8个核心技巧提升代码执行效率

1. 项目概述&#xff1a;为什么你的Python代码跑得慢&#xff1f;“Python慢”&#xff0c;这几乎是每个刚入门的开发者都会听到的“刻板印象”。确实&#xff0c;作为一门解释型、动态类型的语言&#xff0c;在纯粹的执行速度上&#xff0c;Python很难与C、C这类编译型语言正面…...