PostgreSQL / PG 删库事故处理

PostgreSQL DROP DATABASE 恢复与 PG 删库恢复

误执行 DROP DATABASE 后,先不要重建同名数据库,也不要继续向原磁盘写入。先检查备份、快照与 PITR;没有标准恢复条件时,再对只读磁盘副本中的未覆盖数据页做离线尽力恢复。

事故发生后先做这四件事

停止 PostgreSQL 及同盘业务写入,避免空闲块被复用。

保留 PGDATA、pg_wal、表空间目录、云盘或虚拟磁盘快照。

记录 PostgreSQL 版本、DROP DATABASE 时间、数据库名和表结构来源。

对原盘做块级镜像,后续分析和扫描只在副本上进行。

按现有证据选择恢复路径

有物理备份、快照和连续 WAL

优先在隔离环境做 PITR 或快照恢复。这是可验证性最高、对象关系最完整的路径。

只有逻辑备份或部分导出

先恢复已有备份,再单独评估缺失表,避免把“整库恢复”和“残缺数据补齐”混在一起。

没有可用备份,但原磁盘还在

立即停写并制作块级镜像。只有未被覆盖的数据页才可能通过离线扫描和结构映射被导出。

恢复边界

DROP DATABASE 会删除该数据库关联的物理文件。没有基础备份时,WAL 本身通常不能重建整库;离线恢复依赖原磁盘中尚未覆盖的数据页,以及可用的 DDL、版本、编码和业务约束。

扫描得到的数据需要逐表验证。索引可以重建,但主键关系、TOAST 大字段、跨表约束和已被覆盖的页可能不完整。因此应把“发现可读记录”“导出可导入数据”和“业务完整性验证”分开验收。