【问题标题】:Liquibase - loadUpdateData complies CSV checksum changedLiquibase - loadUpdateData 符合 CSV 校验和已更改
【发布时间】:2017-02-11 17:45:07
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: liquibase


    【解决方案1】:

    我太傻了。它需要 runOnChange="true" 而不是 runAlways="true"。

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2018-07-25
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多