如何在 PostgreSQL 中回滚更新

Posted

技术标签:

【中文标题】如何在 PostgreSQL 中回滚更新【英文标题】:How to rollback an update in PostgreSQL 【发布时间】:2012-10-04 13:31:17 【问题描述】:

在终端(在 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值是多少

它会永远消失吗?

【问题讨论】:

未来:您不应该在启用自动提交的情况下运行。 经验教训!在进行更新之前始终备份,请确保!如果您启用了时间点恢复 (PITR),这是可能的。 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

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

Here's an answer I wrote on the same topic earlier。我希望它会有所帮助。

这也可能是:Recoved deleted rows in postgresql。

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

【讨论】:

谢谢..我停止了 postgres 服务..现在有什么方法可以恢复数据吗? @damon 获取整个数据库的文件系统级副本并将其放在安全的地方。

以上是关于如何在 PostgreSQL 中回滚更新的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2005 中回滚 UPDATE 查询?

如何迁移:在 laravel 5 中回滚特定表

如何在 Amazon S3 存储桶中回滚到以前的版本?

在 MS Access 中回滚多个 SQL 更新查询

有没有办法在 Quarkus 单元测试中回滚事务?

如何检测用户是不是在 UIScrollView 中回滚了一个视图?