我正在尝试执行以下 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 文档和例如this answer来自 Nathen Voxland,我认为变更集应该在 DATABASECHANGELOG 表中标记为已运行。相反,它根本没有被记录,正如我之前所说的,每次 liquibase 运行时都会执行(并且每次都再次失败)。我错过了什么吗?
(我使用 MySQL 作为 DBMS)
最佳答案
在 answer由 Nathen Voxland 给出,他推荐了使用 precondition 的更正确的方法。在运行变更集之前检查数据库的状态。
在我看来,忽略故障是个坏主意.... 意味着您没有完全控制数据库配置....“failOnError”参数允许 liquibase 继续。如果实际上不是因为发生了错误,那么构建将变更集记录为已执行不是一个坏主意吗?
关于sql - 总是运行带有 failOnError ="false"的 Liquibase changeSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10913133/