sql - 总是运行带有 failOnError ="false"的 Liquibase changeSet?

标签 sql database-schema database-migration liquibase

我正在尝试执行以下 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/

相关文章:

javascript - BigQuery 中的自定义排序功能

mysql - 替换 MySQL 数据库中的\n\r

c# - 尝试将本地数据库添加到 VS2015 中的 c# 项目时出错

php - 将可标记的人名合并到数据库中

grails - 在 Grails 中进行数据库迁移的良好工作流程是什么?

sql - 何时使用 View 而不是表?

mysql - 具有重复数据的多类别数据库模式

sql - 约束一对多关系或使用预定义的关系约束创建表

Symfony 4 迁移在执行期间迁移失败

ruby - Rails 4 用索引重命名列