我不明白使用Liquibase回滚时的详细步骤。
我有类似于6个变更集的场景,并且对于一个changeset回滚没有定义-也就是说,只有<rollback/>在变更集中。
在使用deployIT执行之后,我可以在Databasechangelog表中看到7个条目,其中6个用于添加,一个用于由于使用deployIT而创建的标记。
回滚之后,我看到了删除所有新添加的6个变更集的行为,尽管其中一个变更集有一个空的回滚标记。
请任何专家告诉我为什么?回滚的确切行为是什么?
总的来说,想知道何时从Databasechangelog删除记录?
发布于 2017-01-11 15:27:01
运行回滚时,液化库会找到要回滚的changeSets,然后检查每个描述如何回滚changeSet的<rollback>标记。
如果没有<rollback>标记,那么Liquibase将检查changeSet中的更改是否包含如何回滚的内置逻辑。正如gile所指出的那样,如果更改中有足够的信息来撤销它(比如createTable更改具有删除表所需的表名),那么它仍然能够回滚它们。
但是,如果更改中没有足够的信息(比如dropTable没有重新创建表所需的信息),那么rollback命令将失败,出现“无法回滚”错误。
所以回滚逻辑是:
如果您指定一个空回滚块,您将告诉Liquibase“回滚此回滚所需的逻辑是不做任何事情”,因此Liquibase很高兴地运行您的no-op回滚命令,并将changeSet标记为回滚。
发布于 2017-01-11 07:49:24
根据更改集的不同,可能会出现自动生成回滚命令的语句,比如Liquibase回滚文档。
许多重构,如“创建表”、“重命名列”和“添加列”可以自动创建rollback语句。如果更改日志只包含适合此类别的语句,则将自动生成回滚命令。 其他重构(如“drop”和“insert data”)没有能够自动生成的相应回滚命令。在这些情况下,以及在要覆盖默认生成的回滚命令的情况下,可以通过changeSet标记中的标记指定回滚命令。如果不希望执行任何操作来撤消回滚模式中的更改,请使用空标记。
在http://forum.liquibase.org/topic/understanding-rollback,您可以找到更多的细节和其他链接。
https://stackoverflow.com/questions/41585052
复制相似问题