PostgreSql的备份和升级
目录
版本概述:
跨大版本数据迁移
QProcess 调用相关进程进行备份和恢复
版本概述:
该数据库版本主要分为主要版本和次要版本,大版本基本每年发布一次,小版本则每几个月即发布,更新较快。在10.0之前所使用的数据库版本由三个数字组成,如pms所使用9.5.2,主要版本为9.5,次要版本为2,即9.5版本第二次发布;在10.0之后版本由两位数字组成,如10.16,
10为主要版本,16为次要版本,同一个主版本由于数据的存储结构相同,且总是前后版本兼容,因此升级只需要将旧版本的data文件替换到新的data文件即可;而跨越主版本升级则会因为存储结构的改变而不能简单的进行data替换。

跨大版本数据迁移
通过pg_dump进行升级,该方法主要是将原有的数据库转存为文本,该文本主要包含数据库重新生成的sql语句,后续再新版本中配合pg_restore或pg_sql进行数据库重新生成。
pg_dump -h 127.0.0.1 -U dbusername -p 5432 -d dbname -f sqlfilename .sql
psql -h 127.0.0.1 -U dbusername -p 5432 -d dbname -f sqlfilename.sql
pg_dump -h 127.0.0.1 -U dbusername -p 5432 -d dbname -F c -f sqlfilename.backup
pg_restore -h 127.0.0.1 -U dbusername -p 5432 -d dbname -1 backup_file.backup
不指定输出格式则输出纯文本,即sql文件;恢复时需要psql程序执行sqlfilename 中sql语句恢复
指定自定义格式或其他格式,恢复时必须用pg_restore读取sqlfilename进行恢复
纯文本格式恢复效率一般比自定义格式低。
-h, --host=HOSTNAME:指定数据库服务器的主机名或 IP 地址。
-p, --port=PORT:指定数据库服务器的端口号。
-U, --username=NAME:指定连接数据库时使用的用户名。
-d, --dbname=NAME:指定要备份的数据库名称。
输出格式参数:
-F, --format=FORMAT:指定导出文件的格式。常见的格式有:
c:自定义格式(compressed),这是默认格式,支持压缩和并行恢复。
d:目录格式,将数据库导出为多个文件,存储在一个目录中。
t:纯文本格式(SQL 脚本),可读性强,但恢复时可能较慢。
C:自定义格式(不压缩)。
输出文件参数:
-f, --file=FILENAME:指定导出文件的路径和名称。
备份内容参数:
-n, --schema=SCHEMA:指定要导出的架构名称。
-t, --table=TABLE:指定要导出的表名称。
--exclude-table=TABLE:排除某张表不导出。
-a, --data-only:只导出数据,不导出结构(表定义)。
-s, --schema-only:只导出结构,不导出数据。
QProcess 调用相关进程进行备份和恢复
int AsyBackUpFileObj::pg_dump_sqlfile(const QString&DbBinDirStr, const QString&sqlfilePath)
{cLogger("PG")->info(TR("开始执行pg_dump命令备份数据").toStdString().c_str());QProcess pgProcess;QStringList ArgumentsList;ArgumentsList << "-h" << "127.0.0.1" << "-U" << "username" << "-p" << "5432" << "-d" << "dbname" << "-f" << sqlfilePath;pgProcess.setProgram(QDir::cleanPath(DbBinDirStr + QDir::separator() + "pg_dump.exe"));pgProcess.setArguments(ArgumentsList);QProcessEnvironment env = QProcessEnvironment::systemEnvironment();env.insert("PGPASSWORD", MyPassWord);//数据库密码写在进程的环境变量中pgProcess.setProcessEnvironment(env);pgProcess.start();QObject::connect(&pgProcess, &QProcess::readyReadStandardOutput, [&]() {QString msg = pgProcess.readAllStandardOutput();cLogger("PG")->info(msg.toStdString());});QObject::connect(&pgProcess, &QProcess::readyReadStandardError, [&]() {QString msg = pgProcess.readAllStandardError();cLogger("PG")->info(msg.toStdString());});if (!pgProcess.waitForStarted()){cLogger("PG")->error(TR("执行pg_dump命令失败").toStdString().c_str());return -1;}if (pgProcess.waitForFinished(-1)){cLogger("PG")->info(TR("执行pg_dump命令备份数据成功").toStdString().c_str());return 0;}else{return -1;}
}int AsyBackUpFileObj::pg_restore_fromFile(const QString&DbBinDirStr, QString&sqlfilePath)
{cLogger("PG")->info(TR("开始执行psql命令执行数据备份sql进行恢复").toStdString().c_str());QProcess pgProcess;QStringList ArgumentsList;ArgumentsList << "-h" << "127.0.0.1" << "-U" << "pms_db_role" << "-p" << "5432" << "-d" << "pms_db_client" << "-f" << sqlfilePath;pgProcess.setProgram(QDir::cleanPath(DbBinDirStr + QDir::separator() + "psql.exe"));pgProcess.setArguments(ArgumentsList);pgProcess.start();if (!pgProcess.waitForStarted()){cLogger("PG")->error(TR("执行psql命令失败").toStdString().c_str());return -1;}if (pgProcess.waitForFinished(-1)){cLogger("PG")->info(TR("执行psql命令执行数据备份sql进行恢复成功").toStdString().c_str());return 0;}else{return -1;}
}
该程序除了用于备份和恢复,也适合用于数据跨版本迁移;在使用文本格式的备份文件时,备份文件是将数据以sql的形式存储在文件中,在高版本中调用psql实际是在将该sql执行一遍在恢复数据,相较于自定义格式效率较低。
相关文章:
PostgreSql的备份和升级
目录 版本概述: 跨大版本数据迁移 QProcess 调用相关进程进行备份和恢复 版本概述: 该数据库版本主要分为主要版本和次要版本,大版本基本每年发布一次,小版本则每几个月即发布,更新较快。在10.0之前所使用的数据库版…...
联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键
联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键 文章目录 联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键1. 进入BIOS快捷键2. 快速进入BIOS设置界面3. 快速进入启动项选择界面 1. 进入BIOS快捷键 进入BIOS设置界面的快捷键为F2快速进入启动项选择界面的快捷键为F12 2. 快速进…...
compose navigation 自定义navtype
Jetpack compose navigation with custom NavType https://www.youtube.com/watch?vqBxaZ071N0c&t182s 定义两个路由 Serializable data object DogListRouteSerializable data class DogDetailRoute(val dog: Dog,val breedSize: BreedSize ) 即两个页面,…...
实现对redis过期键监听案例
开发背景 为了实现当经纪人A提交分佣后如果三天后其他经纪人没有确认分佣就自动确认分佣,如果经纪人A修改分佣后再次提交分佣,时间重置为三天 实现方式 第一步:引入依赖 <dependency> <groupId>redis.clients</groupId> …...
yocto基础 -- bb 文件字段解析
Yocto .bb 文件字段解析 本文详细讲解了 Yocto .bb 文件中各字段的作用和用法,包括 SECTION、SRC_URI、SUMMARY 等,旨在帮助开发者更好地理解和使用 Yocto 构建系统。 目录 1. SECTION 字段 1.1 SECTION 的作用1.2 SECTION 的用法1.3 如何使用 SECTIO…...
Android开发相关的重要网站
本文整理Android相关的重要网站,欢迎大家分享别的网站。 AOSP 官网谷歌官方Android源码搜索Android Issue Tracker 如果在开发过程中遇到与 Android 相关的问题或发现了系统的 bug,可以在这个网站上提交反馈,也可以查询是否存在类似的问题。…...
MySQL 中utfmb3和utfmb4字符集区别
目录 一:utf-8二:utf8mb3三:uft8mb4 一:utf-8 unicode 定义了一套规范来存储各种字符,但是它没有定义这些字符在计算机中应该如何存储。所以基于这种原因,后续基于 Unicode 字符集发展出了多种字符的存储规…...
【C语言】文件操作(1)(文件打开关闭和顺序读写函数的万字笔记)
文章目录 一、什么是文件1.程序文件2.数据文件 二、数据文件1.文件名2.数据文件的分类文本文件二进制文件 三、文件的打开和关闭1.流和标准流流标准流 2.文件指针3.文件的打开和关闭文件的打开文件的关闭 四、文件的顺序读写1.fgetc函数2.fputc函数3.fgets函数4.fputs函数5.fsc…...
今日总结10.18
Exception 和Error 有什么区别 Exception和Error都是Java等编程语言中异常处理机制的重要组成部分,它们都继承自Throwable类。以下是两者的主要区别: 定义与性质 Error: 1.表示严重的系统级错误,如内存溢出(OutOfM…...
React Agent 自定义实现
目录 背景 langchin 中的 agent langchin 中 agent 的问题 langchain 的 agent 案例 自定义 React Agent 大模型 工具定义 问题设定 问题改写,挖掘潜在意图 React Prompt 下一步规划 问题总结 代码 背景 之前使用过 langchian 中的 agent 去实现过一些…...
RabbitMQ 入门(六)SpringAMQP五种消息类型(Direct Exchange)
一、发布订阅-DirectExchange(路由模式) 在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 Direct Exchan…...
2062:【例1.3】电影票
【题目描述】 已知一位小朋友的电影票价是10元,计算x位小朋友的总票价是多少? 【输入】 输入x。 【输出】 人数和电影票总价,中间用一个空格隔开。 【输入样例】 2 【输出样例】 2 20 Code #include<iostream> using namespace st…...
Python | Leetcode Python题解之第477题汉明距离总和
题目: 题解: class Solution:def totalHammingDistance(self, nums: List[int]) -> int:n len(nums)ans 0for i in range(30):c sum(((val >> i) & 1) for val in nums)ans c * (n - c)return ans...
Leecode刷题之路第25天之K个一组翻转链表
题目出处 25-K个一组翻转链表-题目出处 题目描述 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保…...
nuxtjs3 使用tailwindcss做自适应
步骤 1: 安装 Tailwind CSS npm install tailwindcss postcss autoprefixer nuxtjs/tailwindcss步骤 2: 配置 Tailwind CSS 这将生成一个 tailwind.config.js 文件。 npx tailwindcss init步骤 3: 配置 nuxt.config.ts // https://nuxt.com/docs/api/configuration/nuxt-con…...
数据资产目录构建方法与应用
一、引言随着大数据、云计算、人工智能等技术的飞速发展,数据驱动已经成为企业发展的新引擎。数据资产目录作为数据管理的核心工具,不仅能够帮助企业更好地掌握自身数据资源的状况,还能为数据资产的全生命周期管理提供有力支撑。因此…...
【Python爬虫实战】从文件到数据库:全面掌握Python爬虫数据存储技巧
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、文本文件数据存储的基础 二、如何将爬取的数据存储为.txt文件 三、如何…...
断其一指,无惧!ProFusion3D: 相机或者激光失效仍高效的多传感器融合3D目标检测算法
Abstract 多传感器融合在自动驾驶中的3D目标检测中至关重要,摄像头和激光雷达是最常用的传感器。然而,现有方法通常通过将两种模态的特征投影到鸟瞰视角(BEV)或透视视角(PV)来进行单视角的传感器融合&…...
CCS字体、字号更改+CCS下载官方链接
Step1、 按照图示箭头操作 step2 Step3 点击确定,点击Apply(应用),点击Apply and close(应用和关闭) 4、历代版本下载链接 CCS下载:官方链接https://www.ti.com/tool/CCSTUDIO The last but not least 如果成功的解决了你的问题&#x…...
YOLO11改进|注意力机制篇|引入SEAM注意力机制
目录 一、【SEAM】注意力机制1.1【SEAM】注意力介绍1.2【SEAM】核心代码二、添加【SEAM】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【SEAM】注意力机制 1.1【SEAM】注意力介绍 下图是【SEAM】的结构图,让我们简单分析一下…...
别再只用Simulink了!用Pixhawk飞控+UE4搭建无人机集群仿真,我踩过的坑都在这
从Simulink到PixhawkUE4:无人机集群仿真进阶实战指南 当我在实验室第一次尝试将Pixhawk飞控与UE4引擎结合搭建无人机集群仿真系统时,原以为只是简单的接口对接工作,没想到在数据同步、硬件兼容性和分布式通信上踩遍了所有可能的坑。这篇文章就…...
从Doorbell到RoCE包:深度解析RDMA Tx数据流的硬件协同
1. 从门铃到数据包:RDMA发送流程全景图 想象一下你在一家高级餐厅点餐的场景:服务员(CPU)把你的订单(WQE)写在厨房门口的订单板(SQ环形缓冲区)上,然后按一下服务铃&…...
墨语灵犀完整指南:支持的语言列表+字符编码兼容性+特殊符号处理
墨语灵犀完整指南:支持的语言列表字符编码兼容性特殊符号处理 1. 产品概述 墨语灵犀(Moyu Lingxi)是一款基于腾讯混元大模型底座开发的深度翻译工具。与普通翻译软件不同,它将前沿的AI翻译技术融入"冷金笺"与"砚…...
多个自媒体账号如何高效管理:AI+工具+方法
你可曾有过这般情形?早晨才刚给公众号弄好稿子,到了中午就得登录知乎去发布问答,下午还得切换到百家号去瞧瞧是否被收录,到了晚上又忽然想起小红书还没更新……忙得那是手忙脚乱的,自己都不晓得哪个账号今天都发了些&a…...
个人创作者必看:靠谱知识付费平台实测,热门排行榜推荐
对于个人创作者来说,知识付费的核心的是“内容变现”,而选对靠谱的平台,就是打通变现路径的关键一步。不少创作者明明有优质内容,却因选错平台,要么被复杂操作劝退,要么无法沉淀私域用户,要么收…...
终极阴阳师自动化指南:如何用OAS脚本每天节省2小时
终极阴阳师自动化指南:如何用OAS脚本每天节省2小时 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师无尽的日常任务感到疲惫吗?每天重复的御魂…...
零基础AI建站工具实操教程:10分钟从注册到网站上线
很多人觉得建网站是件很技术、很复杂的事,需要懂代码、懂设计。但现在,有了AI建站工具,事情变得完全不同。这篇教程,就是写给完全零基础的你。我们会以一款典型的对话式AI建站工具为例(比如 LynxCode)&…...
5个专业级步骤:解决uBlock Origin拦截异常的完整故障排除指南
5个专业级步骤:解决uBlock Origin拦截异常的完整故障排除指南 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock uBlock Origin作为一款高…...
如何用3步提升百度网盘下载效率:BaiduNetdiskPlugin工具完全指南
如何用3步提升百度网盘下载效率:BaiduNetdiskPlugin工具完全指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 在日常工作和学习中&#…...
音乐标签管理革命:3个步骤让你的本地音乐库焕然一新
音乐标签管理革命:3个步骤让你的本地音乐库焕然一新 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mirrors/mu/music-ta…...
