Liquibase如何按表依赖顺序导出data.xml避免外键错误?
解决方案
- 升级到Liquibase 4.16及以上版本,导出数据时在命令中新增
--sort-by-foreign-keys=true参数即可,示例命令:
liquibase generate-data --diff-types=data --sort-by-foreign-keys=true --changelog-file=data.xml
开启该参数后,Liquibase会自动解析表之间的外键依赖关系,按主表在前、子表在后的顺序生成插入语句,无需手动修改导出的xml文件。
- 若需要长期使用该规则,可直接在Liquibase配置文件(liquibase.properties)中添加默认配置:
liquibase.generateData.sortByForeignKeys=true
配置后每次执行generate-data命令都会默认按依赖顺序导出数据。
- 若暂时无法升级Liquibase版本,可在部署插入数据前新增一个前置changeset,临时禁用Oracle的外键约束,插入完成后再恢复约束,示例changeset配置:
<changeSet id="disable-constraints" author="yourname"> <sql>ALTER SESSION SET CONSTRAINTS = DEFERRED</sql> </changeSet> <!-- 此处为自动生成的插入语句 --> <changeSet id="enable-constraints" author="yourname"> <sql>ALTER SESSION SET CONSTRAINTS = IMMEDIATE</sql> </changeSet>
注意:你给出的建表语句中使用了
Primary、Foreign作为表名,二者均为Oracle保留关键字,实际使用时建议修改表名,或使用双引号包裹保留字避免语法报错。
内容的提问来源于stack exchange,提问作者colintbsd
相关产品推荐
相关产品推荐

