liquibase - 变更集的执行顺序

Posted

技术标签:

【中文标题】liquibase - 变更集的执行顺序【英文标题】:liquibase - execution order of changesets 【发布时间】:2015-01-27 07:57:55 【问题描述】:

据我了解,Liquibase 会按照它们在更改日志中写入的顺序执行更改集。 我希望变更集以另一个顺序运行。 有什么办法可以改变变更集的执行顺序吗?

我们将非常感谢您及时回复我的问题。

【问题讨论】:

为什么不在 XML 文件中重新排序? 我们不会在 xml 中重新排序它们,因为我们将变更日志组织在每个表的单独 xml 文件中,其中包括创建表、创建索引、创建外键等的变更集,并且因为我们有一些循环依赖表,我们希望变更集以与编写它们不同的顺序运行。有可能吗? 然后更改包含它们的顺序:首先是所有create table XMLs(假设它们确实包含PK定义),然后是所有create index XMLs,最后是所有外键XMLs(因为当时将创建所有表)。这是分解处理循环外键引用的脚本的唯一方法 【参考方案1】:

Liquibase 中更改日志的顺序是在需要时部署(执行)更改的顺序。

Liquibase 依赖于您设置正确的顺序。

为了使用与当前情况相匹配的动态顺序,您应该使用比较和同步工具,该工具将根据您的源代码控制存储库和目标环境生成相关的 DDL。

Dbmaestro(我为之工作)提供此功能

【讨论】:

【参考方案2】:

我们采用了类似的方法。我们每个表都有一个 xml 文件,以便对每个表及其列有一个很好的概览。但是当我们需要重构(例如添加新列、移动一些数据、添加新 FK)我们的数据库时,发现这种方法存在一些问题。查看属于一个表的内容的可能性和执行顺序是相互冲突的。我最好(但仍然很脏)的解决方案是启动一个名为 migration_X.xml 的新 xml 文件,其中包含所有 changeSet 以添加列、复制一些数据、添加新约束或 FK。 如果我想查看一个表的定义,我会生成 DDL。

【讨论】:

以上是关于liquibase - 变更集的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

Liquibase - 执行前测试变更集

如何从数据库中删除最后执行的 liquibase 变更集

Liquibase 校验和验证失败

如何为 liquibase 变更集设置超时?

liquibase 中的 Java 代码变更集

Liquibase generateChangeLog 命令生成无变更集