【问题标题】:Can Liquibase ignore checksums for a single changeset?Liquibase 可以忽略单个变更集的校验和吗?
【发布时间】:2015-12-02 22:51:58
【问题描述】:

我通过 Gradle-Liquibase (v 1.1.1) 插件使用 Liquibase。我有以下变更集……

<changeSet id="create_my_stored_proc" author="davea" dbms="mysql" runAlways="true">
    <sqlFile endDelimiter="//" path="src/main/resources/scripts/create_my_stored_proc.sql" stripComments="true"/>
</changeSet>

是否可以设置一些内容,以便仅忽略此变更集的校验和?底层过程处于不断变化的状态,可以重复更新,而不是每次都创建一个新的变更集,我希望现有的变更集在每个 Liquibase 构建上运行。

【问题讨论】:

  • 如果变更集的 runAlways="true" 属性适用于每个 Liquibase 运行,这是您想要实现的吗?
  • 我想要的是每次都运行它并忽略校验和。这有意义吗?
  • runAlways="true" 每次都运行它并且不检查校验和。我看到您已经添加了它,所以要求提供详细信息。

标签: liquibase checksum


【解决方案1】:

您可以使用具有已知良好值的&lt;validCheckSum&gt; 标记禁用每个changeSet 的检查。

例如,如果之前的变更集有一个像 8:b3d6a29ce3a75940858cd093501151d1 这样的校验和,并且您想调整该变更集(但不是在此步骤已经成功的地方重新应用它),那么您可以使用以下内容:

<changeSet author="me" id="mychangeset">
  <validCheckSum>8:b3d6a29ce3a75940858cd093501151d1</validCheckSum>
  <sqlFile ... />
</changeSet>

【讨论】:

    【解决方案2】:

    “默认情况下,RunAlways 仍会引发校验和错误,但您始终可以使用 runOnChange=true 或 any 来更改它。”

    看看在 liquibase 中提出的这张票:https://liquibase.jira.com/browse/CORE-2506

    所以,你可以这样做:

    <changeSet id="create_my_stored_proc" author="davea" dbms="mysql" runAlways="true">
        <validCheckSum>any</validCheckSum>
        <sqlFile endDelimiter="//" path="src/main/resources/scripts/create_my_stored_proc.sql" stripComments="true"/>
    </changeSet>
    

    【讨论】:

      【解决方案3】:

      您可以添加runAlways 和/或runOnChange 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-14
        • 1970-01-01
        • 2015-08-15
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        • 2016-11-27
        相关资源
        最近更新 更多