我有一个过程,在这个过程中,对数据库所做的每一个更改都在它自己的sql文件中更新,而sql文件则在它自己的changeset.xml中引用。例如,table1.sql有一个table1.xml,它使用<sql>标记来引用该sql。table1.sql对数据库中的table1对象做了一些更改。
假设有一堆对象正在更新,一个触发器引用Table1,一个包规范和主体引用Table1,一个约束引用Table1。这些对象的sql语句位于它们各自的sql文件中,如trigger1.xml中引用的trigger1.sql、constraint1.xml中引用的constraint1.sql等。
现在,对应xmls的rollback语句只关注该对象。例如,trigger1.xml的rollback标记仅用于删除trigger1,而constraint1.xml的rollback标记仅用于删除constraint1。
所有的changelog xml都在主xml中排序,主xml决定更新顺序,比如包括first table1.xml、constraint1.xml、trigger1.xml等。
我的问题是,我要么坚持这种方法,要么放弃自己,因为rollbackql命令没有按照正确的顺序生成sql,比如先删除触发器,先删除约束,然后最后删除表1。假设有一个更大的场景,复杂的更改依赖于其他对象,这些对象不能回滚,因为顺序不够智能。
如何处理这种情况?是否有不同的方法被推荐?

最佳答案

您是正确的-Liquibase不会尝试重新订购变更集。它们按更改日志中列出的顺序运行。

07-28 00:37
查看更多