runOnChange = false,但是csv中的更改导致校验和错误

时间:2018-08-06 04:49:45

标签: java sql liquibase

我们有这个变更集,如下所示。我们从csv文件加载数据。 Liquibase脚本已执行。然后有人更改了myfile.csv文件,即更新了现有行中的一些数据。所以我们收到以下错误:

  

DMLChangeLog.xml :: 124 :: mp现在为:   7:33820845173c612453bd2e3441398011

<changeSet author="mp" id="124" runOnChange="false">
    <loadData encoding="UTF-8" file="myfile.csv" tableName="tbl_sysparam">
    </loadData>
</changeSet>

我了解这是由于csv的更改。但是我不明白为什么会这样?然后放入runOnChange =“ false”有什么意义?

2 个答案:

答案 0 :(得分:1)

如果您希望能够在数据更改时重新加载该数据,则可以将runOnChange设置为true。设置为false时,Liquibase会保护数据库免受更改。但是,您将需要保护数据库免受重复复制等的影响,因此,变更集的设计必须使其能够成功重新运行。

通常,您不希望同一变更集在数据库上运行两次。如果您有一个可创建表的变更集,则您不希望该变更集再次运行,因为它将失败。对于插入数据的变更集也是如此-如果您已经插入了数据,并且仅更改了一行,就不想重新插入所有数据。如果要更改一行,则应编写一个更改集,该更改集将删除该行,然后插入新数据。

runOnChange属性通常用于存储过程,例如具有CREATE OR UPDATE样式的语法。

答案 1 :(得分:0)

runOnChange="false" 指定默认行为:更改集的任何更改均失败。

runOnChange="true" 会导致更改后重新运行而没有错误。

您可以使用failOnError=false来防止出现错误。