我TRUNCATEd一张桌子。如何获取数据?

时间:2015-02-04 12:57:20

标签: postgresql data-recovery undelete

在我的postgesql数据库中,遗憾的是我截断了这个表mail_group,并且该表是从数据库中删除的,如何取回该表。

请帮助我,等待回复。

由于

1 个答案:

答案 0 :(得分:2)


处于相同情况的其他人:立即使用pg_ctl stop -m immediate停止您的数据库(immediate很重要,您需要模拟崩溃并阻止检查点)然后不要重新启动它。。如果你的并发事务仍在进行中,你可能真的很幸运,PostgreSQL可能还没有取消链接表的后备文件,所以它可能是可以恢复的。


你很可能无法获取数据,你删除了它。从备份恢复。

PostgreSQL中的普通DELETE将行标记为已删除但实际上并未立即删除数据,因此如果您立即停止数据库并且不向表中写入任何其他内容,则通常可以恢复它。

TRUNCATE的情况 TRUNCATE从文件系统中删除表示数据库表的基础文件。

如果可能的话,恢复数据需要对硬盘进行取证分析。如果数据真的很重要,请立即关闭计算机并拍摄硬盘的磁盘映像。如果可能的话,期望恢复工作花费数千美元,因为你需要知道(a)文件系统内部和(b)PostgreSQL内部的人。我能想到的唯一一个能够做到这一点的技能的人可能会花费5000到10000欧元来完成这种工作所需的时间。 (不是我)。

如果您没有备份,那么您刚刚学到了非常昂贵的课程。


如果其他人正在阅读此行和DELETE行,请立即按照corruption中的说明操作,因为第一个恢复步骤相同。如果您运行TRUNCATE

,这将无济于事