要从我的数据库(oracle,db2)生成插入语句,我使用了带参数的liquibase generateChangeLog命令
- diffTypes = “数据”
此命令使用insert语句生成正确的xml,但是这不知道外部约束,因此我不能再使用此文件来填充我的数据库。这里描述了类似的问题:Is there a way to generate Liquibase data in the right order?。不幸的是,我提出的解决方法对我的数据库来说是不可能的,因为没有任何命令来切换约束检查。
我的问题是,如果存在此问题的任何其他解决方案?为什么我可以生成数据插入语句changelog,但由于外键约束而无法使用它?
答案 0 :(得分:0)
Jens在评论中是对的。 Liquibase无法确定依赖关系,因为主要用例是跟踪运行changeSet。 GenerateChangeLog是一个有用的功能,但它并不打算处理所有情况,管理依赖项是一项复杂的任务,绝对超出了范围。
我的正常建议是,generateChangeLog的输出应该被认为是使用changeLog的有用的第一步,如果你有依赖性问题,只需在执行它们之前重新排序changeSet。如果有很多,您可能需要编写一个脚本,根据您对依赖项的了解对它们进行重新排序。
答案 1 :(得分:0)
如果可以导出模式+数据,一个好的解决方案是单独的DDL,DML和创建约束的DDL的这一部分。您必须按以下顺序重新排序:
它需要一些手动编辑,但您必须为项目执行一次。
另外,作为旁注,对于你的下一个项目,从一开始就开始使用liquibase,这样你就再也不会遇到这个问题了。
答案 2 :(得分:0)
jailer export liquidbase功能非常适用于此。它以拓扑顺序生成更改日志。