20

在终端(在 ubuntu lucid 中)使用 sql 编辑我的 PostgreSQL 数据库中的一些记录时,我进行了错误的更新。

代替 -

update mytable set start_time='13:06:00' where id=123;

我打了——

update mytable set start_time='13:06:00';

因此,所有记录现在都具有相同的 start_time 值。

有没有办法撤销这个改变?表中有大约 500 多条记录,我不知道每条记录的 start_time 值是多少

是不是永远失去了?

4

2 回答 2

12

我假设这是一个已经提交的交易?如果是这样,那就是“提交”的意思,你不能回去。

如果幸运的话,一些数据可能是可以恢复的。立即停止数据库。

这是我之前就同一主题写的答案。我希望它会有所帮助。

这也可能是:在 postgresql 中恢复已删除的行

除非数据绝对重要,否则只需从备份中恢复,这会容易得多,痛苦也少。如果您没有备份,请认为自己非常糟糕。

于 2012-10-14T09:45:54.340 回答
2

如果您发现错误并立即关闭任何使用数据库的应用程序并使其脱机,您可以使用时间点恢复 (PITR) 重播预写日志 (WAL) 文件,直至但不包括进行错误交易的时刻。这会将数据库返回到之前的状态,从而有效地“撤消”该事务。

作为生产应用程序数据库的一种方法,它有许多明显的局限性,但在某些情况下,PITR 可能是最佳选择,尤其是在发生关键数据丢失时。但是,如果在损坏事件之前尚未配置归档,则它没有任何价值。

https://www.postgresql.org/docs/current/static/continuous-archiving.html

其他关系数据库引擎也存在类似的功能。

于 2018-08-17T07:30:42.687 回答