【问题标题】:liquibase changeset onupdating to 3.2.3更新到 3.2.3 的 liquibase 变更集
【发布时间】:2015-11-25 05:16:54
【问题描述】:

我们在 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 版本 - 再次,不理想

谢谢!理查德

【问题讨论】:

  • sql 怎么说:使用 OPTION updateSQL

标签: mysql liquibase


【解决方案1】:

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

【讨论】:

  • 听起来很完美!谢谢你。我现在就试试这个。
  • 是的,这解决了这个问题,谢谢,而且比我最初的想法要好得多。 Liquibase 非常棒,似乎总有一种巧妙的做事方式!
猜你喜欢
  • 2018-01-01
  • 2014-05-20
  • 1970-01-01
  • 2021-11-19
  • 2016-02-06
  • 2019-02-18
  • 1970-01-01
  • 2012-07-11
  • 2013-11-14
相关资源
最近更新 更多