【问题标题】:Change old Liquibase file which is already in the DATABASECHANGELOG更改 DATABASECHANGELOG 中已有的旧 Liquibase 文件
【发布时间】:2023-02-08 23:11:37
【问题描述】:

我有一个旧的 Liquibase .xml 文件,用于向两列添加索引。多年来,它已经在 DATABASECHANGELOG 表和生产中。但是现在我为我的集成测试更新了 H2 数据库,但由于“article_id”,它们失败了。列名中有一个空格。

    <createIndex tableName="order_journal" indexName="IDX_ArticleId_Customer">
        <column name="article_id "/>
        <column name="customer_id"/>
    </createIndex>

我的数据源配置:

我删除了空格,测试成功了。当然应用程序没有启动,因为我在变更锁中编辑了一个已经提交的文件。 编辑旧 Liquibase 文件的常用方法是什么,或者是否有 H2 数据库的方法?

【问题讨论】:

  • 不完全是你要找的东西,但你可以在新的变更集中重命名 h2 的列

标签: spring-boot h2 liquibase


【解决方案1】:

有几个选项,哪个最适合您取决于项目中的约定。

  1. 前提条件不影响校验和:您可以将前提条件添加到现有的变更集,这会阻止在测试数据库上执行,并为具有相反前提条件的测试数据库编写正确的变更集(虽然不清楚如何正确区分测试和生产数据库) - 例如检查Prevent error when dropping not existing sequences, creating existing users
  2. 您可以为修改后的变更集指定&lt;validCheckSum&gt; - seems to be exactly your case
  3. 您可以为测试数据库创建另一个变更集并将两个变更集标记为failOnError="false" - 如果变更集仅包含看起来安全的createIndex变更,这种情况也在liquibase blogPrevent error when dropping not existing sequences, creating existing users中描述
  4. 您可以指定&lt;validCheckSum&gt;ANY&lt;/validCheckSum&gt; - 在这种情况下您不需要弄清楚以前的校验和是什么,但它似乎不安全。

【讨论】:

    猜你喜欢
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多