回滚时 Liquibase 遵循的所有步骤是什么?
What all the steps Liquibase follows while rolling back?
我不明白使用Liquibase回滚的详细步骤。
我有类似 6 个变更集的场景,并且没有定义一个变更集回滚 - 也就是说,变更集中只有 <rollback/>
。
使用 deployIT 执行后,我可以在 Databasechangelog table 中看到 7 个条目,6 个用于添加,1 个用于由于使用 deployIT 创建标签。
回滚后,我看到了删除所有新添加的 6 个变更集的行为,即使这 6 个变更集之一的回滚标记为空。
请哪位高手告诉我为什么?回滚的确切行为是什么?
总的来说想知道什么时候从 Databasechangelog 中删除记录?
根据您的更改集,您可能会遇到自动生成回滚命令的语句,至于 Liquibase Rollback documentation:
Many refactorings such as “create table”, “rename column”, and “add
column” can automatically create rollback statements. If your change
log contains only statements that fit into this category, your
rollback commands will be generated automatically.
Other refactorings such as “drop table” and “insert data” have no
corresponding rollback commands that can be automatically generated.
In these cases, and cases where you want to override the default
generated rollback commands, you can specify the rollback commands via
the tag within the changeSet tag. If you do not want anything done to
undo a change in rollback mode, use an empty tag.
在 http://forum.liquibase.org/topic/understanding-rollback 您可以找到更多详细信息和其他链接。
当 运行 回滚时,liquibase 找到要回滚的 changeSet,然后检查每个描述如何回滚 changeSet 的 <rollback>
标签。
如果没有 <rollback>
标签,Liquibase 会检查 changeSet 中的更改是否具有关于如何回滚的内置逻辑。就像 gile 指出的那样,如果更改中有足够的信息来撤消它(比如 createTable 更改如何具有删除 table 所需的 table 名称),它仍然能够将它们回滚。
但是如果更改中没有足够的信息(比如 dropTable 如何没有重新创建 table 所需的信息),那么回滚命令将失败并显示 "cannot roll back"错误。
所以回滚逻辑是:
- 使用块中定义的内容
- 如果没有回滚块,尝试推断需要什么
- 如果没有足够的回滚信息,回滚前退出
如果您指定一个空的回滚块,您是在告诉 Liquibase "the logic needed to roll this back is to do nothing",因此 Liquibase 会愉快地运行您的无操作回滚命令并将 changeSet 标记为回滚。
我不明白使用Liquibase回滚的详细步骤。
我有类似 6 个变更集的场景,并且没有定义一个变更集回滚 - 也就是说,变更集中只有 <rollback/>
。
使用 deployIT 执行后,我可以在 Databasechangelog table 中看到 7 个条目,6 个用于添加,1 个用于由于使用 deployIT 创建标签。
回滚后,我看到了删除所有新添加的 6 个变更集的行为,即使这 6 个变更集之一的回滚标记为空。
请哪位高手告诉我为什么?回滚的确切行为是什么?
总的来说想知道什么时候从 Databasechangelog 中删除记录?
根据您的更改集,您可能会遇到自动生成回滚命令的语句,至于 Liquibase Rollback documentation:
Many refactorings such as “create table”, “rename column”, and “add column” can automatically create rollback statements. If your change log contains only statements that fit into this category, your rollback commands will be generated automatically.
Other refactorings such as “drop table” and “insert data” have no corresponding rollback commands that can be automatically generated. In these cases, and cases where you want to override the default generated rollback commands, you can specify the rollback commands via the tag within the changeSet tag. If you do not want anything done to undo a change in rollback mode, use an empty tag.
在 http://forum.liquibase.org/topic/understanding-rollback 您可以找到更多详细信息和其他链接。
当 运行 回滚时,liquibase 找到要回滚的 changeSet,然后检查每个描述如何回滚 changeSet 的 <rollback>
标签。
如果没有 <rollback>
标签,Liquibase 会检查 changeSet 中的更改是否具有关于如何回滚的内置逻辑。就像 gile 指出的那样,如果更改中有足够的信息来撤消它(比如 createTable 更改如何具有删除 table 所需的 table 名称),它仍然能够将它们回滚。
但是如果更改中没有足够的信息(比如 dropTable 如何没有重新创建 table 所需的信息),那么回滚命令将失败并显示 "cannot roll back"错误。
所以回滚逻辑是:
- 使用块中定义的内容
- 如果没有回滚块,尝试推断需要什么
- 如果没有足够的回滚信息,回滚前退出
如果您指定一个空的回滚块,您是在告诉 Liquibase "the logic needed to roll this back is to do nothing",因此 Liquibase 会愉快地运行您的无操作回滚命令并将 changeSet 标记为回滚。