【发布时间】: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