数据库升级后得到 liquibase 校验和验证错误

After db upgrade getting liquibase checksum validation error

我将我的 PostgreSQL 从版本 9.6 升级到版本 12,并且我通过 Spring 使用 Liquibase 3.8.0。

启动我的应用程序时进行数据库升级后,第一个变更集出现以下 Liquibase 异常:

Caused by: liquibase.exception.ValidationFailedException: Validation Failed:
     1 change sets check sum
          db.liq.xml::1555784288321-4::myuser was: 8:9df75f119833ded8765efcc910ffa071 but is now: 8:57040acff0d316c100c788531a84ae8b

现在当前的变更集设置了 onValidationFail="MARK_RAN" 标签,所以它应该不会失败,但我仍然收到这个异常..

 <changeSet author="myuser" id="1555784288321-4" onValidationFail="MARK_RAN">

我可以通过设置 <validCheckSum> 标签来解决这个特定的异常,但我认为对于其他变更集我也会得到同样的异常。 我唯一做的就是升级我的 Postgres 数据库。

现在,liquibase 是否使用数据库的函数哈希?如果是,那么它可以解释这种行为,但在每次重大升级后或每次数据库更新其哈希函数时,Liquibase 的行为似乎不太可能是这样的。

您可以随时使用 clearCheckSums 功能。它将清除现有校验和并重新计算它们,而无需 运行 调整您的变更集。

为了 运行 clearCheckSums 你可以使用 maven 目标:

https://www.liquibase.org/documentation/maven/maven_clearchecksums.html

或 Liquibase 命令行:

https://www.liquibase.org/documentation/command_line.html

另一个选项(不好的):

您可以将 <validCheckSum>ANY</validCheckSum> 添加到您的变更集中。

它会解决问题,但您将失去对已执行的变更集中的变更的控制。所以这不是一件好事。