Liquibase - loadUpdateData符合已更改的CSV校验和

时间:2016-10-03 17:43:15

标签: liquibase

我正在使用loadUpdateData(也尝试过loadData)将静态数据的CSV文件加载到表中。尽管它被标记为runAlways =“true”,但当我更改csv时,我的校验和失败。

Liquibase maven插件3.5.2

我尝试了什么:

我希望能够更改文件中的数据(添加/修改/删除行)并相应地更新数据库,因此我创建了一个更改集以截断表并将其标记为runAlways =“true”并且一个更改集来运行loadUpdateData,它也是runAlways =“true”。我不想在DatabaseChangeLog中添加一个更改集来删除,其中文件名与具有这些更改集的文件名匹配。还有另外一种方法吗?根据Liquibase网站上的其他SO帖子和帖子,runAlways似乎已经为之前版本的用户提供了帮助。

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <property name="now" value="sysdate" dbms="oracle" />

    <!-- Truncate the table and insert all the data from the CSV file -->
    <changeSet author="churcp3" id="deleteConfigData" runAlways="true">

        <preConditions onFail="MARK_RAN">
            <tableExists tableName="CONFIGURATION" />
        </preConditions>

        <delete tableName="CONFIGURATION">
        </delete>

        <rollback />
    </changeSet>

    <changeSet author="churcp3" id="insertConfigData" runAlways="true">
        <loadUpdateData encoding="UTF-8"
            file="src/main/resources/data/configuration.tsv" quotchar=""
            primaryKey="CONFIGURATION_ID"
            separator="~" tableName="CONFIGURATION">
            <column name="CONFIGURATION_ID" type="NUMERIC" />
            <column name="SERVICE_NAME" type="STRING" />
            <column name="CATEGORY" type="STRING" />
            <column name="CONFIGURATION_KEY" type="STRING" />
            <column name="CONFIGURATION_VALUE" type="STRING" />
            <column name="CREATE_TS" type="DATETIME" />
            <column name="CREATED_BY" type="STRING" />
            <column name="UPDATED_TS" type="DATE" defaultValueComputed="${now}" />
            <column name="UPDATED_BY" type="STRING" />
        </loadUpdateData>

        <rollback>
            <delete tableName="configuration"></delete>
        </rollback>

    </changeSet>

</databaseChangeLog>

1 个答案:

答案 0 :(得分:1)

愚蠢的我。它需要runOnChange =“true”而不是runAlways =“true”。