如何修复 liquibase 校验和中的 ValidationFailedException?

问题描述 投票:0回答:2

我正在使用 liquibase 和 spring boot。我有 SQL 变更集。我没有更改 liquibase SQL 脚本中的任何内容。但我遇到了以下错误

创建类路径中定义的名为“liquibase”的 bean 时出错 资源:调用init方法失败;嵌套异常是 liquibase.exception.ValidationFailedException:验证失败: 1 更改设置校验和
liquibase/db/0001_sample.sql::sample1_2::admin 是: 8:600cf084d9c1ea85df2ddaa4f7a8a309 但现在是: 8:47d241e6e1636203501ec72cafe4e5b6 “, “类”:“org.springframework.beans.factory.BeanCreationException”,

下面是我的0001_table1.sql

--liquibase formatted sql
--changeset admin:sample1_1
create table....
--rollback DROP TABLE tablename

--changeset admin:sample1_2
add column....

我认为这是由于格式从我的 IDE 更改为另一个 IDE 造成的。但我喜欢修复它。我不是在寻找清除校验和。请建议在 liquibase 中使用纯 SQL 时如何处理。

注意:我看过 xml 版本的示例,但我正在寻找带有 liquibase 的 SQL。

java spring spring-boot liquibase
2个回答
3
投票

是的,你真的不能这么做。一旦您应用了更改集,它就会在配置数据库中记录校验和,任何更改(甚至空格)都会导致此验证错误。如果您使用 maven 或 gradle,您可以清除校验和,并且将通过使用 liquibase 插件上的clearChecksums 目标在下次运行时重新计算它们。

您应该密切注意,当您使用 SQL 选项时(我认为是通过

<include file="
),它不会改变空白的校验和,因此可能存在您没有看到的其他差异。如果您确信这些更改无关紧要,请添加

--validCheckSum 8:47d241e6e1636203501ec72cafe4e5b6

到 SQL 文件的标头,这将告诉 liquibase,即使原始校验和计算为

8:600cf084d9c1ea85df2ddaa4f7a8a309
8:47d241e6e1636203501ec72cafe4e5b6
也是该文件的有效校验和。

一些好的建议是使用 RCS 更严格地控制这些文件,否则您将不断为此而烦恼。


1
投票

在我的情况下,通过添加 liquibase SQL 脚本,通过探索

databasechangelog
表并从中手动删除冲突记录解决了相同的错误:

DELETE FROM databasechangelog WHERE id = 'id_you_discovered'
© www.soinside.com 2019 - 2024. All rights reserved.