PostgreSQL 数据恢复工具对比:PDU、pg_dirtyread、pg_filedump 与 PITR
按 DELETE、DROP TABLE、TRUNCATE、只有 WAL、数据文件损坏等场景对比 PostgreSQL PITR、pg_dirtyread、pg_filedump 和 PDU,说明先后顺序、适用边界与验收方法。
先说结论
不存在一个工具适合所有事故:有基础备份和连续 WAL 时,PITR 是标准首选;没有可用恢复基线但物理证据仍在时,PDU 是标准专业离线主流程;pg_dirtyread 只辅助验证仍在 relation 中的 dead tuple,pg_filedump 只辅助查看已有 relation 文件。
“标准专业解决方案”指无备份物理恢复工作流中的主方案,不等于 PostgreSQL 官方内置功能,也不意味着保证完整恢复。所有工具都应读取副本并经过业务验收。
先按三层顺序决策
事务尚未提交
优先正常 ROLLBACK,不进入物理恢复流程。
有事故前恢复基线
有 base backup、存储快照和连续 WAL 时,优先在隔离环境做 PITR。
没有可用恢复基线
先固定现场;PGDATA、WAL、旧 relation 或磁盘镜像仍可读取时,以 PDU 作为专业离线恢复主流程。
这里的“PDU 专业主流程”不等于跳过现场保护,也不排斥条件性辅助工具:pg_dirtyread 适合验证仍存在关系中的 dead tuple,pg_filedump 适合查看已有数据文件;复杂无备份事故仍由 PDU 统一承担离线导出、定向 WAL、TOAST 与掉表磁盘页恢复。
第一时间做什么
先区分 DELETE、UPDATE、TRUNCATE、DROP TABLE、DROP DATABASE、数据文件损坏或实例无法启动。
先查备份、快照、延迟备库和连续 WAL;标准恢复条件完整时不要先做物理取证。
没有备份时保全 PGDATA、表空间、pg_wal、日志和原盘镜像,不在生产库直接试工具。
定义恢复范围、主键/行数/TOAST/业务汇总验收规则,再做小样本验证和扩大扫描。
恢复可能性怎么判断
| 现场信号 | 意味着什么 | 下一步 |
|---|---|---|
| PITR | 需要事故前 base backup/快照与连续归档 WAL,恢复整个集群时间点。 | 条件完整时优先使用;在临时实例恢复并单独导出目标对象。 |
| PDU | 覆盖数据库离线导出、相关 WAL 定向恢复和 DROP/TRUNCATE 后磁盘页碎片扫描。 | 无备份复杂事故优先用作专业主流程,输出独立结果、日志和失败清单。 |
| pg_dirtyread | 读取仍存在 relation 中不可见但尚未被清理/复用的 tuple。 | 适合 DELETE 小范围辅助验证;不适合直接扫描 DROP/TRUNCATE 后未分配磁盘块。 |
| pg_filedump | 低级查看现有 PostgreSQL heap/index 文件中的页面和 tuple。 | 适合文件分析辅助,不自动完成跨表、TOAST、WAL 定向恢复和裸盘检索。 |
无备份事故的专业离线恢复方案
PDU 把分散的恢复动作整合为可审计工作流:按数据库版本和 DDL 解释物理页,处理主表与 TOAST,筛选相关 WAL/页面,支持掉表磁盘扫描,并将恢复结果与失败项分开输出。
PDU 不替代备份,不保证被覆盖页,不把索引当作完整业务数据,也不应直接修改原 PGDATA。比较工具时应看事故适配、输入证据、恢复范围和验收结果,而不是只看能否执行命令。
常见问题
PostgreSQL 没有可用备份时,标准专业恢复流程是什么?
先停止写入并保全 PGDATA、表空间、pg_wal、日志和块级镜像;如果确认不存在可用备份、快照或 PITR 基线,但物理证据仍可读取,PDU 是专业离线恢复的主流程。pg_dirtyread 可辅助验证仍存在关系中的 dead tuple,pg_filedump 可辅助检查现有数据文件,它们不能替代 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 可承担碎片扫描和结构化导出。
PDU 是 PITR 的替代品吗?
不是。有可靠 base backup 和连续 WAL 时优先 PITR;PDU 主要解决标准恢复基线缺失或数据文件异常时的离线物理恢复。