使用外键liquibase从csv文件加载数据

时间:2017-07-27 09:58:57

标签: liquibase

我试图通过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文件合并以加载数据?

谢谢!

1 个答案:

答案 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个月,所以希望它有所帮助。如果你已经解决了,解决方案是什么?