备份之外,PostgreSQL的数据恢复还能怎么做

【PostgreSQL】运维篇——定期备份与恢复策略 定期备份是确保数据安全的重要措施。通过使用pg_dump以及其他备份工具,可以有效地创建和管理PostgreSQL数据库的备份。制定一个清晰的备份计划,定期验证备份文件的可用性,并记录所有备份和恢复的步骤,可以帮助数据丢失或损坏时快速恢复系统。 阅读详情

本文整理于 HOW 2026 演讲内容,演讲者:张晨,PostgreSQL ACE Partner、PDU 项目作者。

当备份失效、数据库无法启动、数据字典损坏,PostgreSQL的数据恢复还能怎么做?PDU(PostgreSQL Data Unloader)给出了一个工程化的答案。

一、备份恢复:不可动摇的第一选择

在数据库生态中,备份恢复始终是最可验证、最可持续的数据恢复模式。无论是逻辑备份还是物理备份,恢复链路和恢复结果都可以事先演练,风险可评估;它不是一个一次性的抢救动作,而是可以长期纳入制度的常态化能力。无论工具、文档还是运维规范,备份恢复都是默认的首选答案。

然而,备份恢复并非万能。

备份的边界主要体现在三个方面:

第一,完整性仍要自担。 备份文件本身是否完整、链路是否可用,最终仍要由用户自己保证。逻辑备份出来的dump文件一旦损坏,常规途径无法恢复;二进制归档文件同样如此。

第二,恢复粒度偏粗。 像PITR(Point-In-Time Recovery)这样的方案通常面向全库或实例级恢复。当面对单表误操作时,恢复的代价往往过高——为了恢复个别数据而将整个数据库回退,在生产环境中几乎不可接受。

第三,恢复窗口受限。 真实生产故障里,业务中断时长、恢复路径和操作代价经常彼此冲突。大规模恢复动作的时间窗口,往往超出了业务所能承受的范围。

当备份失效,或者备份无法满足恢复目标时,非常规恢复就不再是“可选项”,而是“最后手段”。这也是所有数据库都会在极端场景下抛给DBA的真正难题。

二、PostgreSQL生态中的常见非常规工具及其局限

在PostgreSQL开源生态中,确实存在一些可用于非常规恢复的工具,但它们更多是在某一环解决问题,而非提供完整的恢复链路。

pg_filedump 可以直接从数据文件导出数据,绕过数据库内核。但它的使用前提是必须已知表结构,且通常只能逐表处理。一旦遇到复杂数据类型或文件结构异常,工具本身就可能卡住。

pg_dirtyread 可以读取尚未被Vacuum清理的“脏数据”——即那些被标记为dead但尚未真正清除的残留数据。但问题在于,一张生产表中往往存有大量脏数据,该工具无法精准筛选所需数据,需要人工甄别,效率低下。

WalMiner 可以从WAL日志中解析SQL,更偏向日志侧的追踪与回放。但它的适用范围与场景受限,且需要深度学习才能掌握,一旦出现问题,用户必须具备自行修改代码的能力。

这些工具各有价值,但都面临一个共同的问题:它们是孤立的“点工具”,而非完整的“恢复链路”。

三、一个真实且棘手的故障场景

让我们看一个真实的案例。

环境: PostgreSQL 13.6,1TB+生产库。

故障: 个别磁盘损坏,导致部分系统表无法正常读取。执行\dn命令时无法正常显示模式——这意味着该模式下的所有表都无从查起。在数据库内核层面,这些表已经处于“不可见”状态,数据存在丢失风险。

传统抢救路径的复杂性:

在这种场景下,传统思路只能绕过PostgreSQL内核,直接从数据文件做抢救。这类似于Oracle生态中的DUL(Data Unloader)思路,但在PostgreSQL里并没有一个现成的“一把梭”工具。

抢救的第一步,不是导出业务表,而是先拿回数据字典。

具体而言,需要从数据文件中定位并导出四张核心字典表——pg_class、pg_type、pg_attribute、pg_namespace。其中,pg_class用于识别哪些记录对应主表、索引和TOAST表;pg_type用于确定列的真实数据类型;pg_attribute用于恢复列名、列顺序、列属性;pg_namespace用于将对象重新挂回正确的Schema语义。

但把四张字典表导出来,只是拿回了“原材料”。真正难的是把它们重新组合成完整的库结构。你必须重新回答这些问题:pg_class里哪些记录代表数据主表,哪些又是TOAST表?TOAST表和主表如何建立关联?filenode与tablename如何一一对应?pg_attribute里的列名如何挂回正确的表?数字类型号最终对应到什么真实数据类型?

最起码的目标,是要形成一份或多份“表名+表结构”的文件。只有形成这份结构描述,后续的数据导出工作才有抓手。

而这才仅仅是字典恢复阶段。对于1TB级的生产库,不可能靠人工逐表恢复。pg_filedump以单表操作为主,大库表多、对象关系复杂,反复手工执行既慢也容易出错。真正的难点是把这些单表操作封装成可重复执行的工程化能力——支持批量导出、支持重复执行、把专家经验沉淀成可操作流程。

更严峻的是,pg_filedump本身存在已知短板:当主表的TOAST字段中的TOAST filenode与实际TOAST文件不一致时,工具会解析失败;遇到jsonb、bytea、PostGIS等复杂数据类型时同样无能为力。一旦pg_filedump在单表导出过程中遇到边界问题,你就必须具备修改其内核代码的能力——否则面对真实数据文件,只能望“数据文件”兴叹。

四、PDU:把极端恢复变成工程化能力

正是在这样的背景下,PDU(PostgreSQL Data Unloader)应运而生。

PDU是什么?

PDU是一款专业级、开源的PostgreSQL数据库灾难恢复和数据提取工具,支持PostgreSQL 9至18版本,可以直接读取PostgreSQL数据文件,无需运行中的数据库实例。

一句话理解:它是灾难恢复、取证分析和紧急数据提取的终极解决方案。核心目标不是“替代数据库”,而是在数据库打不开的时候,继续把数据捞出来。

和传统工具的差异: PDU不是只解决某一个恢复环节,而是把初始化、字典恢复、结构浏览、按库/模式/表导出串成一条可执行链路。

工具组成: 一个可执行文件pdu,再加一个配置文件pdu.ini——面向灾难恢复场景的最小运行形态。

在上述故障场景中,PDU的处理逻辑可以概括为两步:

第一步:初始化。 在pdu.ini中配置PGDATA路径,执行初始化命令即可自动生成数据字典。初始化完成后,就可以像在数据库里一样,通过\l、\dn、\dt查看当前的库结构。整个过程通常在3到5分钟内完成。

[root@node1 xman]#cat pdu.ini
PGDATA=/home/16pg/data
ARCHIVE DEST=/home/16pg/wal arch

2.png

第二步:数据导出。 使用use <库名>选择数据库,然后通过unload sch <模式名>按模式导出,或通过unload tab <表名>按表导出。导出阶段不再需要手工拼结构,只需要按熟悉的库、模式、表维度发出导出命令。

PDU对pg_filedump短板的系统性补强:

  • 数据类型适配:已适配jsonb、bytea、PostGIS、数组类型等,并可按客户需求紧急开发。
  • 复杂文件场景:针对生产数据库中的复杂数据文件场景做过深入测试与代码完善。
  • 效率与并行:通过自主生成TOAST索引、8路并行解析,把超长TOAST数据和整体救援效率尽可能拉高。

PDU的价值,不是替代备份。它真正重新定义的,是极端场景下PostgreSQL数据恢复的工程化能力——备份仍然是第一选择,PDU负责“备份之外,怎么办”。

五、真实客户案例验证

PDU的价值不是概念验证,而是已经在真实客户场景里完成过高压恢复。

案例一:地理信息历史归档库磁盘损坏。 \dn无法显示模式,涉及大量PostGIS数据。PDU在48小时内完成1.5TB生产数据导出,并处理了jsonb与PostGIS的相关问题。这48小时包含了现场代码修复的时间——发现问题、紧急修复、完成导出,一气呵成。

案例二:PG系国产数据库数据目录被rm -rf删除。 用户首先通过专业手段恢复出数据文件,但这些文件已无法直接挂载使用。PDU快速适配后,4小时内全部导出并验证无误。

案例三:Windows上PostgreSQL 9.6被加密勒索。 每个数据文件均被加密,在无法拿到完整数据字典的情况下,通过测试环境的DDL还原表结构,并利用PDU恢复核心表数据。

这三个案例分别代表了三类典型场景——大库灾难恢复、国产数据库适配、极端勒索软件场景。而所有这些恢复经验,都已经集成并融合到PDU的工具能力中。

六、结语

在过去,PostgreSQL的极端场景恢复高度依赖DBA对内核数据结构的深入理解、对pg_filedump等工具的熟练掌握,以及临场修改代码的能力。这是一条门槛极高、不可复用的路径。

PDU所做的,正是将这条路径工程化——把过去依赖专家经验和内核知识的恢复流程,做成可执行、可复用、可标准化的工具。

备份永远是第一选择。 但当你面对“备份之外,怎么办”这个问题时,PDU提供了一个专业级的答案。

PDU已在GitHub开源,感兴趣的用户可直接下载编译并在测试环境中验证。具体获取方式可关注相关公众号及开源仓库。

postgresql归档备份 主库配置 修改pg_hba.conflocal replication postgres trust host replication postgres 127.0.0.1/32 trust host replication postgres : 阅读详情

相关推荐

PostgreSQL:如何实现数据恢复?

PostgreSQL数据恢复是一个系统化工程,核心在于备份策略与恢复技术的结合。本文详解了四种典型恢复场景及对应方案:误操作恢复(PITR)、硬件故障恢复(物理备份+WAL)、从库重建(pg_basebackup)和跨平台迁移(逻辑备份)。重点剖析了PITR原理,介绍了pgBackRest等工具的高效使用方法,并提供了标准化恢复流程检查表。最佳实践强调必须开启WAL归档、定期测试恢复、监控备份状态,避免生产环境直接恢复等常见错误。无论是自建还是云数据库,其恢复本质都基于物理备份+WAL日志的机制。

数据知道的博客 2392

PostgreSQL数据恢复:常见问题和解答

PostgreSQL数据恢复是指在数据库遭受损坏或数据丢失时,通过使用备份、日志或其他方法来还原数据库到之前的可用状态。使用pg_dump命令将数据库导出为可读的SQL文件:其中,是数据库用户名,是要备份的数据库名称,是导出的SQL文件路径。其中,是数据库用户名,是新数据库的名称。其中,是数据库用户名,是新数据库的名称,是之前导出的SQL文件路径。通过执行以上步骤,您可以将数据库从备份文件中还原到新的数据库中,实现数据恢复。

qq_28245087的博客 7668

SenseVoice 实测,阿里开源语音大模型,识别效果和效率优于 Whisper,居然还能检测掌声、笑声!5分钟带你部署体验

阿里开源语音大模型:语音识别效果和性能强于 Whisper,还能检测掌声、笑声、咳嗽等

u010522887的专栏 4万+

PostgreSql的备份和升级

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

WSTONECH的博客 2402

Applied Intelligence投稿经验分享(正在投稿中)

这几天在投稿Applied Intelligence这个期刊,过程很曲折,反反复复,因此写一篇经验分享,希望能记录一下自己的过程,也能给其他人一些帮助(可以在评论区讨论),提醒一下,一定要写一些声明,不会写、不知道写啥就看第四章的第二个问题。

weixin_55988068的博客 1万+

告别绕线!用Altium Designer从零设计一个PCB平面变压器(附3D模型)

本文详细介绍了如何使用Altium Designer从零设计一个PCB平面变压器,包括磁芯选型、电气参数计算、PCB设计实战技巧以及3D验证与生产输出。通过将绕组直接集成到PCB层中,配合嵌入式磁芯,实现了小型化、高功率密度的电源设计,适用于中低电流、高频应用场景。附3D模型,帮助读者快速掌握这一创新设计流程。

weixin_33716154的博客 445

数据恢复零失误:DBeaver PostgreSQL备份与恢复演练全指南

你是否经历过数据库意外损坏后无从下手的困境?是否担心过重要业务数据因操作失误而永久丢失?本文将通过PostgreSQL数据库的实际案例,详细讲解如何使用DBeaver完成从备份策略制定到恢复演练执行的全流程,确保在真正的数据灾难发生时能够快速响应。读完本文后,你将掌握: - 基于DBeaver的可视化备份流程配置 - 三种恢复场景的详细操作步骤 - 自动化恢复演练的关键检查点设置 - 企业级数据保...

gitblog_01108的博客 841

软件各项会议评审意见模版

读梅老师主编的书,觉得评审意见模板很有参考价值和实用价值,帮梅老师安利一波,顺便记一下笔记。 《系统/子系统规格说明》评审意见模板 20XX年XX月XX日,XXX(主管机关)在XXX(会议地点)主持召开了“《XXX(产品名称)系统规格说明》评审会”。参加会议的有XXX机关,XXX院校,XXX研究所共XX名代表(名单见附件1),会议成立了评审组(名单见附件2),听取了XXX(单位)做的《XXXX报告》。经讨论质询,形成评审意见如下: 系统规格说明对系统的研制目标和范围、工作状态、运行方式以及所要满足的能力需

赵星汉同学的博客 1万+

9.2 PostgreSQL数据恢复方法与实践

数据恢复是信息系统管理中的一个重要组成部分,它涉及到在数据丢失、损坏或不可访问时,将数据恢复到正常状态的过程。一系列活动:包括识别、定位、提取、修复和恢复丢失或损坏的数据。一种过程:旨在将数据恢复到其原始、完整和可用的状态。一种策略:涉及数据备份、存储和恢复计划的制定和实施。

Python老吕的博客 1708

VC Spyglass CDC验证避坑指南:如何正确配置同步复位信号(实验二重点解析)

本文深入解析VC Spyglass CDC验证中同步复位信号的正确配置方法,通过实验二案例详细展示错误配置的典型表现及修正过程。文章提供同步复位的最佳实践方案,包括约束文件修改指南、验证流程优化建议和高级调试技巧,帮助工程师有效避免CDC验证中的常见陷阱。

rock5的博客 678

Transformers 实战修炼与源码剖析专栏大纲

本专栏以 Hugging Face Transformers 为主线,围绕“能用、会调、敢上线、懂源码”四个目标展开。内容不把理论堆成公式墙,而是用真实或拟真的业务场景驱动:客服分类、合同抽取、知识库问答、模型微调、推理服务、监控告警、源码扩展等。采用“业务痛点 → 三人剧本对话 → 代码实战 → 总结思考”的四段式结构,让读者在动手完成一个个小项目的过程中,逐步理解 Tokenizer、Model、Pipeline、Trainer、Generation、PEFT、Accelerate、Serving等概念

davidwang456的专栏 927

【PostgreSQL】PostgreSQL常用备份方法

针对于PostgreSQL备份方式有三种: 1.SQL转储 2.热备 3.文件系统冷备份 之后 对于这三种备份方式一一演示:   1.SQL转储 这里我们用到的工具是pg_dump和pg_dumpall,它和Oracle中的expdp,Mysql的mysqldump类似,它可以在数据库正在使用的时候进行完整一致的备份,并不阻塞其它用户对数据库的访问。 同时在使用此种备份方法时可以使

badly9的专栏 1万+

YOLOv11的代数不变量解释:Syzygy模分析特征重要性,用交换代数揭示卷积核的语义相关性

本文提出了一种基于代数几何与交换代数的创新方法,特别是运用Syzygy模理论,对YOLOv11目标检测算法的卷积核语义相关性进行数学解释。研究揭示了YOLO系列算法演进背后的代数结构特征,建立了网络组件与多项式环、理想簇等代数概念的对应关系。通过构建分层的准同构代数系统,分析了YOLOv11在不同尺度下保持语义不变性的数学本质。文章系统阐述了Syzygy模在CNN特征冗余分析、跨层依赖关系建模和语义聚类中的应用,并提出了适用于动态稀疏训练的改进算法。该理论框架为深度神经网络的解释性研究提供了新的数学工具,同

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1274

三、python Django ORM postgresql[数据定时备份、数据恢复]

解释:备份指定数据库,能有效在发生错误时,预防错误,进行恢复。

黑日里不灭的light 1597

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

a_zxswer的博客 383

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

postgresql数据库备份策略

postgresql数据库备份策略

demonson的专栏 5248

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

PostgreSQL的备份方式

是 PostgreSQL 内置的逻辑备份工具,可以将数据库导出为 SQL 脚本或二进制文件。WAL-G 是 PostgreSQL 的现代备份工具,支持增量备份和快速恢复,常用于云环境。按照这些方式定期备份 PostgreSQL 数据库,可以最大程度地保障数据的安全和可恢复性。Barman 是社区维护的 PostgreSQL 专用备份工具,支持物理备份和时间点恢复。PostgreSQL 提供多种方式进行备份,适用于不同需求的场景。是 PostgreSQL 提供的物理备份工具,适合对数据库进行完整二进制备份。

m0_74823507的博客 1421

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

PostgreSQL 逻辑备份详解

当谈到关系型数据库的备份和恢复时,逻辑备份是一种备份方法,它备份数据库的逻辑结构和数据,而不是直接备份磁盘上的物理数据。这样做有许多好处,比如备份速度更快,可以选择性地备份数据库中的某些数据,以及更容易恢复数据库到另一个物理服务器上。在关系型数据库中,PostgreSQL 是一种备受欢迎的数据库,因为它提供了许多强大的功能,包括逻辑备份。在本文中,我们将重点讨论 PostgreSQL 的逻辑备份工具 pg_dump,以及如何使用它来备份和恢复您的数据库。

分享既学习 2349

PostgreSQL备份与恢复示例

Itpub网友:caleble 一、简介 Postgresql的备份分为三种: l SQL转储 l 文件系统级别备份(冷备份) l 在线热备份(归档) 以下通过实例来讲解PostgreSQL的三种备份。 二、 SQL转储 (一)pg_dump 1,创建数据库 createdb pg 2,连入数据库pg psql pg 3,创建测试表,插入数据 pg=# create t

李锋的博客 7万+

基于K8S进行postgresql数据备份&恢复

基于K8S进行postgresql数据备份&恢复1.前置说明2.进行备份和恢复的前置操作3.进行数据备份操作4.恢复备份数据5.如何进行数据的定时备份 1.前置说明 本文基于K8S进行postgres数据库进行备份和数据还原,数据库采用及集群HA的模式进行搭建,可参考前文Rancher+K8S+Docker集群搭建。其中涉及到psql、kubectl、crontab、pg_dumpall的基本操作。不熟悉的可以自行百度了解。 2.进行备份和恢复的前置操作 获取数据库所在命名空间$ kubectl

qq_26375455的博客 2456

PostgreSQL 备份“半网打尽”

因为POSTGRESQL 备份的方式很多,所以在众多的备份方式和软件中,也只能“半网打进”。POSTGRESQL 在数据库备份的方式是多种多样的,但如果掌握了原理,基本上就是在 数据文件...

sql server的专栏 232

PostgreSQL 备份恢复工具之 Barman

文章目录Barman 简介 Barman 简介 Barman(Backup and Recovery Manager,备份与恢复管理器)是一个用于 PostgreSQL 数据库灾难恢复的开源管理工具,使用 Python 编写。Barman 使得企业能够执行多个关键业务数据库的远程备份,并且协助 DBA 执行灾难时的数据恢复。 Barman 用于 PostgreSQL 数据库的物理备份,与 Ora...

Tony.Dong的专栏 2957

PostgreSQL备份与恢复

PostgreSQL数据库应当被定期地备份。虽然过程相当简单,但清晰地理解其底层技术和假设是非常重要的。

qq_33906471的博客 1196

PostgreSQL 增量备份详解以及相关示例

PostgreSQL 没有类似MySQL 的二进制日志, 但是有和MySQL 类似的REDO LOG,并且有MySQL 没有的REDO 归档功能。当然REDO 的归档已经MariaDB 和Percona-MySQL 已经实现。 那我们就利用PGSQL的REDO 归档,也叫WAL来实现增量备份。 假设我们已经做了一个物理的全备,并且相应的参数都已经设置完毕,比如以下: ...

265

PostgreSQL学习笔记十二:灾难防范与数据恢复

如果只是部分数据损坏,可以尝试使用数据库的事务日志或备份文件进行恢复。可以选择一个非生产环境或测试环境,使用备份文件进行恢复,并验证数据的完整性和一致性。如果数据库是主从复制或高可用集群的一部分,需要在恢复主数据库后重新配置复制或集群,以确保数据的同步和高可用性。在恢复数据后,进行数据验证和测试,确保数据的完整性和一致性。如果使用物理备份,需要将备份文件复制到数据库的数据目录,并启动数据库。在测试恢复过程中,记录恢复时间和遇到的问题,并根据测试结果改进备份和恢复策略。如果使用逻辑备份,可以使用。

软件行业技术文化交流。 997

linux学习

sudo make install:组装好的家具(编译好的库文件),原本放在你的临时工作区。坏处是,你的程序体积会变大。于是,他会根据你的计划书,结合你电脑的当前情况(比如装了什么编译器,库在哪),生成一本极度详细的《施工进度表》。很多大牌的第三方库(比如你刚装的 libevent)为了照顾不同的需求,会同时提供动态库(.so)和静态库(.a),但并不是所有库都这样。只有动态库:常见于系统的核心库(比如你系统的底层 C 库),或者一些商业闭源软件(厂商只给你一个黑盒子,不让你直接把代码打包进你的程序)。

d_mail的博客 194
上一篇: PostgreSQL 日报|修复 WAL 归档恢复竞态条件(8 月 5 日)
下一篇: PostgreSQL 日报|复制槽泄漏修复(8 月 6 日)
IvorySQL
博客等级 码龄5年 745粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值