liquibase 前提条件的最佳实践

Sha*_*ram 3 java database liquibase

我正在寻找有关何时preConditions在 Liquibase 中使用的最佳实践changeSet。我理解这样一个事实,即它有助于检查数据库的现有状态,然后应用更改。如果我要从一开始就使用 Liquibase 并且所有更改都将通过 Liquibase 完成,这changeSet不足以检查/验证现有状态吗?写作preConditions在这种情况下,在我看来更加多余。我一直无法找到任何关于此的好文件。

在我的用例中,我将使用 Liquibase 进行数据库架构更改 + 在几个表中添加元数据。我看到了一些 db 模式更改查询的示例,例如添加表、列等preConditions已被使用的地方。但是在正常的插入、更新、删除查询方面并没有看到太多。preConditions为此类数据操作查询编写代码也是一种好习惯吗?有没有关于这方面的好文档?

hts*_*ame 5

是的- 你应该写先决条件。在每个变更集上。总是。您的变更集应该是原子的,因此为它们编写前提条件根本不难。只需要一点自制力。

- changeSet id 不足以检查/验证现有状态。在理想的世界中,这可能就足够了,一切都运行得非常顺畅,没有错误,也没有人用脏手弄乱数据库。或者有人可以在你的databaseChangeLog和理想流程中间插入一些其他的changeSet,仅基于changeSet的顺序和身份就会被破坏。

但是我们的世界并不理想,所以没有,changeSet的ID是不够的。你需要先决条件。

另外,如果您想了解有关如何确定变更集标识的更多信息,请查看此问题


要回答有关在执行插入、更新和删除查询之前检查数据的问题的第二部分:

你总是可以使用<sqlCheck>标签。

<changeSet id="foo" author="bar">
    <preConditions onFail="MARK_RAN">
        <sqlCheck expectedResult="0">
            SELECT COUNT(*) FROM user WHERE full_name='John Doe';
        </sqlCheck>
    </preConditions>
    <sql>
       <!-- your custom SQL query here which modifies data somehow -->
    </sql>
</changeSet>
Run Code Online (Sandbox Code Playgroud)