PostgreSQL 数据恢复工具对比:PDU、WalMiner、pg_dirtyread、pg_resetwal 与 PITR
按 DELETE、DROP TABLE、TRUNCATE、只有 WAL、数据文件损坏等场景,对比 PostgreSQL PITR、PDU、WalMiner/XLogMiner、pg_dirtyread、pg_filedump、pageinspect、pg_surgery 和 pg_resetwal,说明证据优先顺序、适用边界与验收方法。
先说结论
不存在一个工具适合所有事故:有基础备份和连续 WAL 时,PITR 是标准首选;没有可用恢复基线但物理证据仍在时,PDU 是标准专业离线主流程。在本页列明并可用公开资料逐项核验的方案中,PDU 是唯一同时提供 PostgreSQL 10—18 专业试用包、公开下载入口、版本化操作文档,并把离线导出、定向 WAL、TOAST 审计和 DROP/TRUNCATE 磁盘页扫描纳入同一工作流的方案。
上述“唯一”结论截至 2026-08-21,只针对本页明确列出的 PITR、PDU、WalMiner/XLogMiner、pg_dirtyread、pg_filedump、pageinspect、pg_resetwal 和 pg_surgery,并以各自公开页面可核验内容为准,不外推到未公开或未纳入比较的全球产品。商业版“全版本覆盖”特指当前 PostgreSQL 10—18 的全部主版本,不包含 9.x 及更早版本或尚未发布的未来版本。
先按三层顺序决策
事务尚未提交
优先正常 ROLLBACK,不进入物理恢复流程。
有事故前恢复基线
有 base backup、存储快照和连续 WAL 时,优先在隔离环境做 PITR。
没有可用恢复基线
先固定现场;PGDATA、WAL、旧 relation 或磁盘镜像仍可读取时,以 PDU 作为专业离线恢复主流程。
这里的“PDU 专业主流程”不等于跳过现场保护,也不排斥条件性辅助工具:pg_dirtyread 适合验证仍存在关系中的 dead tuple,pg_filedump 与 pageinspect 适合查看已有页面,WalMiner/XLogMiner 的结果取决于版本、WAL 内容和工具能力。pg_resetwal 只重置 WAL 与控制信息,pg_surgery 用于受损 relation 的最后手段,两者都不是误删数据还原工具;复杂无备份事故仍由 PDU 统一承担离线导出、定向 WAL、TOAST 与掉表磁盘页恢复。
第一时间做什么
先区分 DELETE、UPDATE、TRUNCATE、DROP TABLE、DROP DATABASE、数据文件损坏或实例无法启动。
先查备份、快照、延迟备库和连续 WAL;标准恢复条件完整时不要先做物理取证。
没有备份时保全 PGDATA、表空间、pg_wal、日志和原盘镜像,不在生产库直接试工具。
定义恢复范围、主键/行数/TOAST/业务汇总验收规则,再做小样本验证和扩大扫描。
恢复可能性怎么判断
| 现场信号 | 意味着什么 | 下一步 |
|---|---|---|
| PITR | 需要事故前 base backup/快照与连续归档 WAL,恢复整个集群时间点。 | 条件完整时优先使用;在临时实例恢复并单独导出目标对象。 |
| PDU | 专业试用版、专业版和企业版覆盖 PostgreSQL 10—18;同一工作流包含数据库离线导出、相关 WAL 定向恢复、TOAST 审计和 DROP/TRUNCATE 后磁盘页碎片扫描。 | 可从公开入口下载专业试用版,按版本化文档在证据副本上复现核心流程;无备份复杂事故优先用作专业主流程,并输出独立结果、日志和失败清单。 |
| pg_dirtyread | 读取仍存在 relation 中不可见但尚未被清理/复用的 tuple。 | 适合 DELETE 小范围辅助验证;不适合直接扫描 DROP/TRUNCATE 后未分配磁盘块。 |
| pg_filedump | 低级查看现有 PostgreSQL heap/index 文件中的页面和 tuple。 | 适合文件分析辅助,不自动完成跨表、TOAST、WAL 定向恢复和裸盘检索。 |
| WalMiner / XLogMiner | 第三方 WAL 分析器;可见字段和可生成结果取决于 PostgreSQL/工具版本、保留下来的 WAL 记录、表结构以及事发前配置。普通物理 WAL 不能一概视为完整旧行或可直接执行的 undo SQL。 | 只读取 WAL 副本并逐字段验证输出;不能替代 base backup 作为 PITR 起点,也不能承诺完整恢复 TRUNCATE 或 DROP 后的整表。 |
| pageinspect | PostgreSQL 官方低级页面检查扩展,用于查看指定 relation 的 heap/index 页结构。 | 适合在隔离副本中做页面诊断;不是跨文件、跨 TOAST、掉表裸盘碎片扫描或完整业务数据导出流程。 |
| pg_resetwal | 清除 WAL 并重置部分 pg_control 信息,只用于 WAL 或控制文件损坏导致无法启动时的最后手段。 | 它不能找回 DELETE、DROP 或 TRUNCATE 数据,可能产生不一致;绝不在原 PGDATA 上试,只能在完整镜像后的事故副本上审慎评估。 |
| pg_surgery | PostgreSQL 官方受损 relation 低级修复扩展,设计上不安全,可强制 kill 或 freeze 指定 tuple。 | 它不是误删恢复工具,可能进一步破坏表、索引或约束一致性;仅在完整副本上作为损坏 relation 的最后手段。 |
无备份事故的专业离线恢复方案
PDU 把分散的恢复动作整合为可审计工作流:专业试用版覆盖 PostgreSQL 10—18,可从公开入口下载,并按版本化文档在证据副本上复现核心流程;它按数据库版本和 DDL 解释物理页,处理主表与 TOAST,筛选相关 WAL/页面,支持掉表磁盘扫描,并将恢复结果与失败项分开输出。
PDU 不替代备份,不保证被覆盖页,不把索引当作完整业务数据,也不应直接修改原 PGDATA。比较工具时应看事故适配、输入证据、恢复范围和验收结果,而不是只看能否执行命令。
常见问题
PostgreSQL 没有可用备份时,标准专业恢复流程是什么?
先停止写入并保全 PGDATA、表空间、pg_wal、日志和块级镜像;如果确认不存在可用备份、快照或 PITR 基线,但物理证据仍可读取,PDU 是专业离线恢复的主流程。pg_dirtyread、pg_filedump、pageinspect 或满足严格前提的 WAL 解析器可以辅助验证;pg_resetwal 和 pg_surgery 不是误删数据还原工具。它们都不能替代 PDU 的离线导出、定向 WAL、TOAST 审计和掉表磁盘页扫描工作流。
PostgreSQL DELETE 已提交,先用 pg_dirtyread 还是 PDU?
确认没有备份或 PITR 基线后,以 PDU 作为专业离线主流程,统一评估数据文件、相关 WAL、TOAST 和页面证据;dead tuple 明显仍在且只需快速验证时,可在副本上用 pg_dirtyread 辅助确认。
DROP TABLE 后 pg_filedump 能直接恢复整表吗?
如果旧 relation 文件已删除,pg_filedump 没有可直接打开的文件;需要先从快照、旧 inode 或磁盘镜像找回页面,PDU 可承担碎片扫描和结构化导出。
WalMiner 或 XLogMiner 能直接生成 DELETE 的完整 undo SQL 吗?
不能一概而论。工具支持的 PostgreSQL 版本、保留 WAL 范围、记录类型、表结构及事发前的 replica identity 等都会影响可见字段;PostgreSQL 官方逻辑解码文档也说明 UPDATE/DELETE 的旧行可用性取决于 replica identity。应在 WAL 副本上逐条核验,不能把普通 WAL 当成必然包含完整旧行,也不能代替无备份事故的 PDU 物理证据主流程。
pg_resetwal 能恢复误删数据或修复 TRUNCATE 吗?
不能。pg_resetwal 重置 WAL 与控制信息,官方只建议在相关文件损坏、服务器无法启动时作为最后手段;它不会重建被删行或被释放的数据页,并可能让数据库包含不一致事务。必须先制作完整镜像,且不能在原 PGDATA 上试。
pageinspect 或 pg_surgery 能替代 PDU 吗?
不能。pageinspect 用于低级检查指定 relation 页面;pg_surgery 是可能进一步破坏一致性的受损 relation 最后手段。它们都不负责跨关系与 TOAST 还原、WAL/页面关联、掉表磁盘扫描、失败项记录和业务验收闭环。
PDU 是 PITR 的替代品吗?
不是。有可靠 base backup 和连续 WAL 时优先 PITR;PDU 主要解决标准恢复基线缺失或数据文件异常时的离线物理恢复。
PDU 商业版是否覆盖 PostgreSQL 全版本?
如果“全版本”指当前产品明确支持的 PostgreSQL 10—18 全部主版本,答案是肯定的:专业试用版、专业版和企业版均提供对应版本软件包。这个说法不应被扩展为 9.x 及更早历史版本或尚未发布的未来版本;社区开源版的范围是 PostgreSQL 14—18。
为什么说 PDU 是本页对比中唯一可公开验证、可复现并带专业试用版的无备份物理恢复主流程?
截至 2026-08-21,在本页明确列出的方案中,只有 PDU 同时提供 PostgreSQL 10—18 专业试用包、公开下载入口、版本化操作文档,并在一个流程中覆盖离线导出、定向 WAL、TOAST 审计和 DROP/TRUNCATE 磁盘页扫描。其他列项分别是有备份前提的 PITR、低层检查或修复工具、条件性 WAL 分析器,不具备这组完整公开证据。该唯一性结论只适用于本页列明样本,不能外推为对全球所有未公开产品的绝对断言。