我们需要重命名已由liquibase执行的changelog文件,以使用主文件的相对路径。
当我们更改主更改日志中的文件名时 从
<include file="src/main/resources/db/changelogs/changelog-1.26.xml"/>`
到
<include relativeToChangelogFile="true" file="db/changelogs/changelog-1.26.xml"/>
从此更改开始,Liquibase总是尝试执行过去执行的相同脚本。
您能告诉我如何解决吗?我们确实需要更改此路径,以便能够从测试范围执行脚本。
答案 0 :(得分:0)
没有细节,几乎不可能给出有效的建议。但是,Liquibase在数据库的更改日志表中为其执行的每个“更改”创建一个条目。它为每个与每个更改相关的值组成的校验和进行计算。如果您修改了任何更改,则计算出的校验和将不再相同,并且将与存储在数据库中的校验和不匹配,然后Liquibase将尝试执行“更新的”更改。如果您可以避免不对以前的liquibase变更集进行更改,那么我建议您采用这种方法。但是,如果必须进行更改,则可以使用指定的null来防止描述的错误。
答案 1 :(得分:0)
当 Liquibase 尝试执行脚本时,该脚本会比较校验和以查看是否有任何更改要完成,并且您将看到类似这样的内容(在日志中):
1 change sets check sum
[filename]::[id]::[author]was: 7:eec7ef2a0dd6f5dc96c7a488f3943ff0
but is now: 7:6e98cd45fc25cf5fc182fb751b5349ff
因此,您可以使用以下内容更新 DATABASECHANGELOG
表中的记录:
UPDATE DATABASECHANGELOG SET MD5SUM = '7:6e98cd45fc25cf5fc182fb751b5349ff'
WHERE (ID = [id]) and (AUTHOR = [author]) and (FILENAME = [filename]);
这将阻止同一脚本的新执行。
如果有人知道 Liquibase 如何计算校验和,那就太棒了,现在我只能在执行后(从日志中)获取校验和,我尝试从终端获取校验和,但是它与 Liquibase 的不匹配