Liquibase generateChangeLog命令 - 使用insert语句生成changelog

时间:2015-02-23 08:28:43

标签: oracle db2 liquibase dml

要从我的数据库(oracle,db2)生成插入语句,我使用了带参数的liquibase generateChangeLog命令

  

- diffTypes = “数据”

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

我的问题是,如果存在此问题的任何其他解决方案?为什么我可以生成数据插入语句changelog,但由于外键约束而无法使用它?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

  1. DDL(无约束)
  2. DML(数据)
  3. DDL(从步骤1中删除的约束)
  4. 它需要一些手动编辑,但您必须为项目执行一次。

    另外,作为旁注,对于你的下一个项目,从一开始就开始使用liquibase,这样你就再也不会遇到这个问题了。

答案 2 :(得分:0)

jailer export liquidbase功能非常适用于此。它以拓扑顺序生成更改日志。

http://jailer.sourceforge.net/