12

我正在尝试changeSet在应该创建索引的 liquibase 中执行以下操作。如果索引不存在,它应该默默地失败:

<changeSet failOnError="false" author="sys" id="1">
    <createIndex unique="true"  indexName="key1" tableName="Table1">
        <column name="name" />
    </createIndex>
</changeSet>

到现在为止还挺好。问题是,这changeSet不会登录到 DATABASECHANGELOG 表中,因此每次 liquibase 运行时都会执行。根据 liquibase 文档,例如来自 Nathen Voxland 的这个答案,我认为变更集应该在 DATABASECHANGELOG 表中标记为运行。相反,它根本没有记录,正如我之前所说的,每次 liquibase 运行时都会执行(并且每次都失败)。

我错过了什么吗?

(我使用 MySQL 作为 DBMS)

4

1 回答 1

8

在Nathen Voxland 给出的答案中,他推荐了更正确的方法,即在运行变更集之前使用先决条件检查数据库的状态。

在我看来,忽略失败是个坏主意……意味着您不能完全控制数据库配置……“failOnError”参数允许 liquibase 继续。如果实际上它没有因为发生错误而记录更改集,那么构建记录不是一个坏主意吗?

于 2012-06-06T22:41:16.503 回答