始终运行带有failOnError =“false”的Liquibase changeSet?

时间:2012-06-06 11:17:53

标签: sql database-schema database-migration liquibase

我正在尝试在liquibase中执行以下changeSet,这应该创建一个索引。如果索引不存在,它应该静默失败:

<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的this answer我认为变更集应该在DATABASECHANGELOG表中标记为已运行。相反,它根本没有记录,正如我之前说的每次liquibase运行时(并且每次都失败)。

我错过了什么吗?

(我使用MySQL作为DBMS)

1 个答案:

答案 0 :(得分:3)

在Nathen Voxland给出的answer中,他建议在运行变更集之前使用precondition检查数据库状态的更正确方法。

在我看来,忽略失败是一个坏主意....意味着你没有完全控制数据库配置....“failOnError”参数允许liquibase继续。如果实际上没有因为发生了错误而将一个changset记录下来,这不是一个坏主意吗?