首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在后退时,Liquibase遵循的所有步骤是什么?

在后退时,Liquibase遵循的所有步骤是什么?
EN

Stack Overflow用户
提问于 2017-01-11 07:29:32
回答 2查看 1.1K关注 0票数 0

我不明白使用Liquibase回滚时的详细步骤。

我有类似于6个变更集的场景,并且对于一个changeset回滚没有定义-也就是说,只有<rollback/>在变更集中。

在使用deployIT执行之后,我可以在Databasechangelog表中看到7个条目,其中6个用于添加,一个用于由于使用deployIT而创建的标记。

回滚之后,我看到了删除所有新添加的6个变更集的行为,尽管其中一个变更集有一个空的回滚标记。

请任何专家告诉我为什么?回滚的确切行为是什么?

总的来说,想知道何时从Databasechangelog删除记录?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-11 15:27:01

运行回滚时,液化库会找到要回滚的changeSets,然后检查每个描述如何回滚changeSet的<rollback>标记。

如果没有<rollback>标记,那么Liquibase将检查changeSet中的更改是否包含如何回滚的内置逻辑。正如gile所指出的那样,如果更改中有足够的信息来撤销它(比如createTable更改具有删除表所需的表名),那么它仍然能够回滚它们。

但是,如果更改中没有足够的信息(比如dropTable没有重新创建表所需的信息),那么rollback命令将失败,出现“无法回滚”错误。

所以回滚逻辑是:

  1. 使用块中定义的内容
  2. 如果没有回滚块,请尝试推断所需的内容。
  3. 如果没有足够的信息回滚,请在回滚前退出

如果您指定一个空回滚块,您将告诉Liquibase“回滚此回滚所需的逻辑是不做任何事情”,因此Liquibase很高兴地运行您的no-op回滚命令,并将changeSet标记为回滚。

票数 3
EN

Stack Overflow用户

发布于 2017-01-11 07:49:24

根据更改集的不同,可能会出现自动生成回滚命令的语句,比如Liquibase回滚文档

许多重构,如“创建表”、“重命名列”和“添加列”可以自动创建rollback语句。如果更改日志只包含适合此类别的语句,则将自动生成回滚命令。 其他重构(如“drop”和“insert data”)没有能够自动生成的相应回滚命令。在这些情况下,以及在要覆盖默认生成的回滚命令的情况下,可以通过changeSet标记中的标记指定回滚命令。如果不希望执行任何操作来撤消回滚模式中的更改,请使用空标记。

http://forum.liquibase.org/topic/understanding-rollback,您可以找到更多的细节和其他链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41585052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档