Liquibase 验证异常:mysql 中不允许使用 forIndexName

Liquibase Validation Exception: forIndexName is not allowed in mysql

我已经从现有的 Oracle 数据库生成了变更集。当我尝试在 MYSQL 数据库中执行该变更集以复制模式时,出现以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.ValidationFailedException: Validation Failed:
     1 changes have validation failures
          forIndexName is not allowed on mysql, db/changelog/2019/001-initial_schema.xml::157562123123-12::sahilmehta97 (generated)

失败的变更集是


<changeSet author="sahilmehta97 (generated)" id="157562123123-11">
        <createIndex indexName="STUDENTID_UNIQUE" tableName="STUDENT" unique="true">
            <column name="STUDENT_ID"/>
        </createIndex>
</changeSet>
<changeSet author="sahilmehta97 (generated)" id="157562123123-12">
        <addUniqueConstraint columnNames="STUDENT_ID" constraintName="STUDENTID_UNIQUE" forIndexName="STUDENTID_UNIQUE" tableName="STUDENT"/>
    </changeSet>

我知道 MYSQL 不支持 forIndexName,但它是使用 mvn liquibase:generateChangeLog 命令自动生成的。 那么我应该怎么做才能克服这个问题呢?

  1. 有什么方法可以从 oracle 数据库生成 MYSQL 兼容的变更集?
  2. 我应该更改从 oracle 数据库生成的变更集吗?
  3. 当我 运行 mvn liquibase:update 命令更新 MYSQL 数据库时,有什么方法可以使生成的 chageset 与 MYSQL 兼容?

或者有其他方法吗?

不保证从数据库生成的变更日志可以在不同的数据库平台上运行。虽然 Liquibase XML 变更日志格式被设计为与数据库无关,但仍有一些功能是特定于数据库的。

如果您的目标是创建适用于多个数据库平台的变更日志,则必须特别小心(和测试)以确保变更日志适用于这些平台。描述所有必须完成的不同事情将非常困难。

在这种情况下,我将更改变更集以仅从变更集中删除 forIndexName 属性。然后通过使用 liquibase update 命令将变更集部署到 Oracle 和 MySQL 数据库来测试它,以确保它正在执行您想要的操作。