liquibase变更设置更新为3.2.3

时间:2015-08-31 08:14:28

标签: mysql liquibase

我们已经在webapp中使用liquibase 3.0.8一段时间了,Spring-liquibase bean在应用程序启动时应用了数据库更新。 我们决定通过3.1,3.1.1,3.2.0然后3.2.3逐步更新我们的开发数据库,​​此时更新失败并出现校验和验证错误。我们尝试恢复到3.2.0但得到一组不同的校验和错误。 我也试过直接从3.0.8到3.4.1(写作时的当前版本),并得到相同的校验和错误,

我从liquibase发行说明中了解到3.2.0中存在计算错误校验和的错误,但我不能选择在生产数据库上将受影响的校验和设置为NULL,因为我们的webapp是部署在我们无法访问的客户服务器上。

以下是一个变更集的示例,其更新集的校验和在将liquibase更新到3.2.0以后的任何版本时失败。

<changeSet author="xxxxx" id="16042015">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">select count(*) from Organisation</sqlCheck>
</preConditions>
<comment>Add Organisation table</comment>
<loadData tableName="Organisation" file="sqlUpdates/data/organisations.csv">
             <column name="id" type="NUMERIC" />
             <column name="title" type="STRING"/>
             <column name="approved" type="NUMERIC"/>
</loadData>

非常感谢有关处理此问题的最佳方法的任何建议。以下是我们目前的想法,所有这些都有明显的缺点:

1)我们可以创建一个新的变更集文件,在任何其他变量集之前运行,包含一个在更新开始之前将所有校验和设置为null的变更集,以便在第一时间停止发生错误。这远非理想,因为我们不再能够确定其他陈述是否已被真正改变。

2)告诉客户执行一些SQL语句将相关的变更集校验和设置为null - 这也远非理想,因为我们的许多客户都不熟悉MySQL并且可能会弄乱一些东西。

3)根本不更新liquibase并坚持使用最新的3.1版本 - 再次,不理想

谢谢!理查德

1 个答案:

答案 0 :(得分:2)

最简单的选择是在问题changeSet中使用<validCheckSum>标记。这将允许您根据先前的版本逻辑列出可以使用的特定校验和。