我正在尝试在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)
答案 0 :(得分:3)
在Nathen Voxland给出的answer中,他建议在运行变更集之前使用precondition检查数据库状态的更正确方法。
在我看来,忽略失败是一个坏主意....意味着你没有完全控制数据库配置....“failOnError”参数允许liquibase继续。如果实际上没有因为发生了错误而将一个changset记录下来,这不是一个坏主意吗?