gpt4 book ai didi

liquibase - 为什么在更新时未指定时所有上下文都会执行?

转载 作者:行者123 更新时间:2023-12-03 06:23:45 25 4
gpt4 key购买 nike

我正在使用 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”标记用于测试的变更集,并通过给出上下文“test”来应用测试数据来执行它们。很好——有道理。但是

“当需要迁移生产数据库时,不要包含“测试”上下文,并且不会包含您的测试数据。 ”

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

同样,我希望省略更新执行测试,只会执行常规变更集,而不测试变更集。

或者我在这里遗漏了一些东西:)?

最佳答案

这就是 Liquibase 的工作原理 - 如果您执行更新且未指定上下文,则所有变更集都将被视为适用于该更新操作。

有几种方法可以实现这一点,开发团队必须选择一种。

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

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

关于liquibase - 为什么在更新时未指定时所有上下文都会执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30783353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com