Liquibase generateChangeLog 命令 - 使用插入语句生成变更日志

Liquibase generateChangeLog command - generating changelog with insert statements

为了从我的数据库(oracle、db2)生成插入语句,我使用了带有参数

的 liquibase generateChangeLog 命令

--diffTypes="data"

此命令使用插入语句生成正确的 xml,但是这并不知道外部约束,因此我无法再次使用此文件来填充我的数据库。此处描述了类似的问题:Is there a way to generate Liquibase data in the right order?。不幸的是,建议的解决方法不适用于我的数据库,因为没有任何命令可以切换约束检查。

我的问题是,是否存在解决此问题的其他方法?为什么我可以生成数据插入语句changelog,但是因为外键约束不能使用?

Jens 在评论中是正确的。 Liquibase 无法确定依赖关系,因为主要用例是跟踪 运行 变更集。 GenerateChangeLog 是一项有用的功能,但它并不旨在处理所有情况,并且管理依赖项是一项复杂的任务,绝对超出范围。

我的一般建议是,generateChangeLog 的输出应该被视为使用 changeLog 的有用的第一步,如果您有依赖性问题,只需在执行它们之前重新排序 changeSet。如果它们很多,您可能需要编写一个脚本来根据您对依赖项的了解对它们重新排序。

如果可以导出架构+数据,一个好的解决方案是将DDL、DML 和创建约束的这部分DDL 分开。您必须按以下顺序重新排序:

  1. DDL(无约束)
  2. DML(数据)
  3. DDL(从步骤 1 中删除的约束)

它需要一些手动编辑,但您必须为您的项目做一次。

顺便说一下,对于你的下一个项目,从一开始就使用 liquibase,这样你就不会再遇到这个问题了。

jailer export liquidbase 功能对此非常有用。它按拓扑顺序生成更改日志。

http://jailer.sourceforge.net/