更新到 3.2.3 时的 liquibase 变更集

liquibase changeset onupdating to 3.2.3

我们在我们的 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) 我们可以先创建一个新的变更集文件,运行,其中包含一个变更集,该变更集将在更新开始之前将所有校验和设置为空,以首先阻止错误发生。这远非理想,因为我们不再能确定其他陈述没有被真正改变。

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

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

谢谢!理查德

最简单的选择是在问题变更集中使用 <validCheckSum> 标签。这将让您列​​出基于先前版本逻辑的特定校验和。