我们有这个变更集,如下所示。我们从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”有什么意义?
答案 0 :(得分:1)
如果您希望能够在数据更改时重新加载该数据,则可以将runOnChange
设置为true。设置为false时,Liquibase会保护数据库免受更改。但是,您将需要保护数据库免受重复复制等的影响,因此,变更集的设计必须使其能够成功重新运行。
通常,您不希望同一变更集在数据库上运行两次。如果您有一个可创建表的变更集,则您不希望该变更集再次运行,因为它将失败。对于插入数据的变更集也是如此-如果您已经插入了数据,并且仅更改了一行,就不想重新插入所有数据。如果要更改一行,则应编写一个更改集,该更改集将删除该行,然后插入新数据。
runOnChange
属性通常用于存储过程,例如具有CREATE OR UPDATE
样式的语法。
答案 1 :(得分:0)
runOnChange="false"
指定默认行为:更改集的任何更改均失败。
runOnChange="true"
会导致更改后重新运行而没有错误。
您可以使用failOnError=false
来防止出现错误。