Liquibase:回滚数据 modification/deletion

Liquibase: Rollback for data modification/deletion

到目前为止,我对 Liquibase 的经验很少,但我读到你应该始终有一个回滚策略。

https://www.liquibase.org/get-started/best-practices

Always have a rollback plan
Write changesets in a way that they can be rolled back. For example, use a relevant change clause instead of using a custom tag. Include a clause whenever a change doesn’t support an out-of-box rollback. (e.g., sql, insert, etc). Learn more about rollbacks.

如果需要数据修改或删除(过时)数据,我不知道如何处理好。
我找到了一些例子,其中数据库条目被删除并且回滚定义包含两个带有修复数据的插入语句。但这不是真实世界的场景。这里我们可能有包含数百万条记录的表。

是否有任何关于数据操作/转换/删除的最佳实践,分别是回滚策略?
通常应该不惜一切代价避免数据操纵/破坏性操作吗?

提示:我说的不是小型应用程序,而是由不同团队中的许多人开发并交付给数百个客户的企业解决方案。只是给大家一个背景。

对此有多种看法,但在现实生活中,我认为回滚策略不太实用。您通常需要前滚。话虽如此,liquibase 用于结构 (ddl) 更改。

对于数据,尤其是数以百万计的行数据,我会在 liquibase 之外对其进行编排,作为您发布计划的一部分。我已经看到大型专有银行软件通过 renaming/copying table 到另一个 table 然后进行更改来处理此问题。

SO,如果你有tableX,你需要添加一列。可以将table复制到tableX_old,修改tableX.

如果迁移成功,删除tableX_old。如果没有,请使用 tableX_old 回滚以恢复您的数据。