2009-09-17 54 views
1

我做了一些更改postgres表,我想恢复到以前的状态。没有数据库的备份。有没有办法做到这一点?如在,postgres采取自动快照并将其存储在某处或原始数据永远丢失?Postgres恢复回

回答

6

默认情况下,PostgreSQL不会存储所有旧数据 - 当然会让很多人感到惊讶。然而,它有一个内置的Point-in-time Recovery机制,它几乎完全符合你的要求。您必须保留代表对数据库所做更改的“预写日志文件”的存档,并且可以定期进行基本备份。当你想恢复时,你可以恢复到特定的时间甚至特定的交易ID。

+0

要明确:只有在删除稍后可能要恢复的数据之前打开PITR才能使用。默认情况下,您需要归档的WAL文件才能工作,并不会永久保存在任何地方,您必须首先设置它。 – 2009-09-18 04:13:21

4

如果你没有备份,并且对数据做了一个操作,我认为你可以做的事情不多:数据库现在有你的新数据,而它的旧版本已被替换/删除。

数据库引擎的目标是坚持存储在其中的数据 - 而不是从中删除的数据。

对于下一次:如果您需要尝试一些事情,请使用事务,并且在您确定所做的事情是确定之前不要提交它 - 在commitint或rollbacking之前请注意不要等待太久,因为它可能会锁定某些内容,阻止其他人进行查询。

+0

谢谢马丁。这不是生产表。这是在我的本地盒子上。所以很想知道postgres是否每小时或每天都会自动拍摄快照或类似的东西。 – Abhi 2009-09-17 05:50:51