我试图通过liquibase中的csv文件填充2个表。 我有一个名为tenant的表,另一个名为tenant_configuration的表,并且具有租户的外键。第一部分是负载租户数据:
<changeSet id="1" context="test">
<comment>Insert data for tenant table</comment>
<loadUpdateData
primaryKey="id"
file="tenant.csv"
tableName="tenant"/>
</changeSet>
然后我想使用另一个csv文件来填充租户配置,但是从第一次更改中检索tenant_id。
<changeSet id="2" context="test">
<comment>Insert data for tenant_db_configuration table</comment>
<loadData tableName="tenant_db_configuration"
file="tenant_db_configuration.csv"
separator="," >
<column name="tenant_id" type="NUMERIC" defaultValueComputed="(SELECT ID FROM tenant WHERE tenant_id = tenant_1)"/>
<column header="username" name="username" type="STRING"/>
<column header="password" name="password" type="STRING"/>
</loadData>
</changeSet>
试过这个但liquibase忽略了tenant_id部分并显示:
[Failed SQL: INSERT INTO [dbo].[tenant_db_configuration] ([username], [password]) VALUES...
我如何检索该外键并与现有的csv文件合并以加载数据?
谢谢!
答案 0 :(得分:1)
据我所知,您需要在secomnd CSV文件tenant_db_configuration.csv中手动建立关系。我的意思是,那里的每一行都需要指向tenat Table中的现有id。
如果订单不重要,您信任csv数据,则可以在开始导入数据之前使用changeSet禁用外键检查。
我不知道您使用的是DBMS但是MYSQL是
<changeSet author="liquibase-docs" id="sql-example">
<sql dbms="mysql">
SET FOREIGN_KEY_CHECKS=0;
</sql>
</changeSet>
然后您可以在单独的changeSet之后启用它。
这个问题已经过去了3个月,所以希望它有所帮助。如果你已经解决了,解决方案是什么?