我正在使用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>
答案 0 :(得分:1)
愚蠢的我。它需要runOnChange =“true”而不是runAlways =“true”。