如何在 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 中回滚更新的主要内容,如果未能解决你的问题,请参考以下文章