java - liquibase preConditions 的最佳实践
问题描述
我正在寻找何时preConditions
在 Liquibase中使用的最佳实践changeSet
。我了解它有助于检查数据库的现有状态然后应用更改的事实。如果我要从一开始就使用 Liquibase 并且所有更改都将通过 Liquibase 完成,这changeSet
不足以检查/验证现有状态吗?在这种情况下,写作preConditions
在我看来更加多余。我还没有找到任何好的文件。
在我的用例中,我将使用 Liquibase 进行数据库架构更改 + 在几个表中添加元数据。我看到了一些数据库模式更改查询的示例,例如添加表、列等preConditions
已使用的地方。但在正常的插入、更新、删除查询方面看不到太多。preConditions
为此类数据操作查询编写也是一种好习惯吗?有什么好的文档吗?
解决方案
是的 - 你应该写前置条件。在每一个变更集上。总是。您的变更集应该是原子的,因此为它们编写前置条件一点也不难。只需要一点点自制力。
否- changeSet id 不足以检查/验证现有状态。在理想的世界中,一切都运行得非常顺利,没有错误,没有人用他们的脏手弄乱数据库,这可能就足够了。或者有人可以在您的 databaseChangeLog 和理想流程中间插入一些其他的 changeSet,仅基于 changeSets 的顺序和身份将被破坏。
但是我们的世界并不理想,所以No,changeSet 的 ID 是不够的。你需要前置条件。
另外,如果您想了解有关如何确定 changeSet 的身份的更多信息,请查看此问题。
要回答关于在执行插入、更新和删除查询之前检查数据的问题的第二部分:
您可以随时使用<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>
推荐阅读
- javascript - 试图显示一个对象字符串而不是键
- python - 如何使用python将两级行转换为列?
- mysql - 存储 md5(url) 而不是 url(用作键)有什么性能优势?
- python - Pandas Python:添加计算每个产品 ID 的列
- php - 如何发出正确的 xml api 请求?
- amazon-web-services - 通过 AWS 上的 Tibanna 执行 Snakemake 工作流程
- ssis - SSIS 集成运行时 ADF - 为 Visual FoxPro 9.0 安装 Microsoft OLE DB 提供程序
- ios - iOS:NSPredicate 使用存储为字符串的日期进行比较
- excel - 如果行号包含在集合中,一种删除行的方法?
- android - 应用未运行时在 Android 手机上接收 FCM 数据通知