在我的postgesql数据库中,不幸的是我截断了这个表mail_group
,并且该表已从数据库中删除,如何取回该表。
请帮助我,等待回复。
谢谢
最佳答案
任何处于相同情况的人:立即使用 pg_ctl stop -m IMIMIMED
停止数据库(IMMEDIATE
很重要,您需要模拟崩溃并防止检查点)然后不要重新启动它。。如果并发事务仍在进行中,那么您可能真的很幸运,PostgreSQL 可能还没有取消链接表的支持文件,因此它可能是可恢复的。
您很可能无法取回数据,您已将其删除。从备份恢复。
PostgreSQL中的普通DELETE
会将行标记为已删除,但实际上并不会立即删除数据,因此如果您立即停止数据库并且不写入任何其他内容,通常可以恢复数据 table 。
TRUNCATE
的情况不是。 TRUNCATE
从文件系统中删除表示数据库表的基础文件。
如果可能的话,恢复数据需要对您的硬盘进行取证分析。如果数据确实很重要,那么立即关闭计算机并拍摄硬盘驱动器的磁盘镜像。如果可能的话,预计恢复工作将花费数千美元,因为您需要了解 (a) 文件系统内部结构和 (b) PostgreSQL 内部结构的人员。我能想到的唯一一个有能力完成这项工作的人可能会花费大约 5000 到 10000 欧元来完成此类工作所需的时间。 (不是我)。
如果您没有备份,您就已经吸取了非常昂贵的教训。
如果其他人正在阅读此内容并删除
行,请立即按照 corruption 中的说明进行操作因为第一个恢复步骤是相同的。如果您运行 TRUNCATE
,这将无济于事。
关于postgresql - 我截断了一个表。我如何取回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28321999/