如果未在更新时指定所有上下文,为什么会执行所有上下文?

av

我正在使用Liquibase 3.3.5更新我的数据库。具有上下文是仅执行变更日志的特定部分的好方法。但是我不明白,为什么在更新时没有提供上下文,为什么要执行所有变更集。考虑以下示例:

  • 变更集A:context = test
  • 变更集B:无上下文
  • 变更集C:context = prod

所以

  • 使用context = test执行更新,将执行变更集A + B。
  • 使用context = prod执行更新,将执行变更集B + C。
  • 在没有上下文的情况下执行更新,将执行变更集A + B + C。

对我来说,这根本没有道理:)。

我希望仅执行变更集B,因为它没有定义特定的上下文。

他们说,在Liquibase上下文示例中:http : //www.liquibase.org/documentation/contexts.html(“使用测试数据的上下文”),应该将变更集标记为“ test”进行测试,并使用给上下文“测试”以应用测试数据。很好-有道理。

“当需要迁移生产数据库时,请不要包含“测试”上下文,也不包含测试数据。

因此,如果在执行生产更新时不指定“测试”上下文,那么它也将执行“测试”变更集,因为我根本没有指定上下文。

同样,我希望在执行更新时省去测试,只会执行常规变更集,而无需测试变更集。

还是我在这里想念什么:)?

史蒂夫·多尼

这就是Liquibase的工作方式-如果您进行更新并且未指定上下文,则所有变更集均被视为适用于该更新操作。

有两种方法可以实施,开发团队必须选择一种。

  1. 如果在更新操作期间未指定上下文,则不会考虑任何变更集。
  2. 如果您未指定上下文,则将考虑所有变更集。
  3. 如果您不指定上下文,则仅考虑没有上下文的变更集。
  4. 如果您未指定上下文,并且所有变更集都没有上下文,那么将考虑所有变更集,但是如果某些变更集确实具有上下文,请转到上面的选项1、2或3。

团队本可以选择选项3(这符合您的期望),但很久以前决定选择选项2,因为这在当时似乎是“最佳”方式。那时我还不在团队里,所以我不知道更多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么当上下文值更新时我的上下文不更新?

scala的执行上下文和播放的执行上下文之间有什么区别

当我们说存储同步上下文时,所有存储的是什么?

当 React 上下文状态更新时,如果它的上下文没有被使用,它是否会强制重新渲染子组件?

AIML-上下文-为什么上下文在所有情况下都不具有最高优先级?

Django - 上下文 - 如何将上下文传递给所有视图

所有页面的默认上下文Django

kubectl如何列出所有上下文

使所有SELinux上下文永久存在

是否可以延迟获取Traversable的所有上下文?

为所有视图提供额外的上下文

在上下文级别过滤所有表

获取所有视图中的用户上下文 django?

替换上下文中字符的所有实例

上下文评估有什么功能

Akka 流 - 为什么没有删除上下文?

没有正确的上下文......为什么?

为什么我的数组没有上下文?

React App 不會更新上下文,但所有孩子都會更新

在执行闭包之前,是否在全局上下文中声明了所有功能?

为什么只有部分上下文菜单会触发 WPF 中的关联命令?

为什么来自父上下文的更改会自动转到子上下文?

ECMAScript 中的“一组 ECMAScript 执行上下文”和“执行上下文堆栈”有什么区别

React 上下文(钩子)不更新所有引用

生成容器映像时,列出“生成上下文”和/或WORKDIR中的所有文件

cudaDeviceSynchronize()等待仅在当前CUDA上下文中还是在所有上下文中完成?

非法访问Core Data上下文:AppDelegate中提供的上下文的所有者是哪个线程?

反应:为什么我的上下文值没有更新?

反应:为什么我的上下文值没有更新?