【问题标题】:Liquibase is trying to execute executed scriptsLiquibase 正在尝试执行已执行的脚本
【发布时间】:2020-02-11 09:12:58
【问题描述】:

我们需要重命名已由 liquibase 执行的变更日志文件以使用主文件的相对路径。

当我们更改主更改日志中的文件名时 从此

<include file="src/main/resources/db/changelogs/changelog-1.26.xml"/>` 

<include relativeToChangelogFile="true" file="db/changelogs/changelog-1.26.xml"/>

从此更改中,Liquibase 总是尝试执行过去执行的相同脚本。

你能告诉我如何解决这个问题吗?我们确实需要更改此路径才能从测试范围执行脚本。

【问题讨论】:

    标签: spring spring-boot database-migration liquibase


    【解决方案1】:

    以防万一有人遇到类似的问题:如果liquibase 尝试再次执行相同的脚本,即使是在一次运行中,尝试在更改日志 xml/yaml 中摆弄./ 或尾随/。在我的例子中,它尝试运行1.sql2.sql3.sql,然后是./1.sql——由于明显的原因而失败了。从path 中删除尾随“/”有帮助。

    【讨论】:

      【解决方案2】:

      当 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 中的不匹配

      【讨论】:

        【解决方案3】:

        没有具体细节,几乎不可能给出有效的建议。但是,Liquibase 会在数据库的更改日志表中为其执行的每个“更改”创建一个条目。它为每一个计算校验和,这些校验和由与每个更改相关的值组成。如果您修改了任何更改,计算出的校验和将不再相同,并且与存储在数据库中的校验和不匹配,然后 Liquibase 将尝试执行“更新”的更改。如果您可以避免更改之前的 liquibase 变更集,我建议您采用这种方法。但是,如果您必须进行更改,您可以使用指定 preconditions 来防止您描述的那种错误。

        【讨论】:

        • 具体是什么意思?我们已经执行了脚本,现在我们需要这些脚本的位置,而不需要重复执行已执行的脚本。
        • Liquibase documentation 讨论了这个问题。它说:“每个更改集都有一个 'id' 和 'author' 属性,它们与更改日志文件的目录和文件名一起唯一标识它。”基于此,很明显,通过重命名或移动更改日志文件,您实际上是在更改每个更改的 ID,因此 Liquibase 会考虑这些新更改。
        • 我知道,因此我写在这里是为了找到一些解决方案,如何更新已执行文件的校验和或设置 liqiubase 以忽略文件名或类似的东西。
        • 您是否尝试过按照我的建议使用前置条件?我不知道有什么方法可以改变校验和的计算方式。
        • 是的,但我无法想象在我的情况下如何使用它
        猜你喜欢
        • 2022-08-18
        • 1970-01-01
        • 2016-11-29
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 2014-07-23
        • 2019-01-14
        • 1970-01-01
        相关资源
        最近更新 更多