【问题标题】:Liquibase context with AND使用 AND 的 Liquibase 上下文
【发布时间】:2019-03-10 02:00:58
【问题描述】:

liquibase documentation 中写道,可以在使用 AND、OR、! 指定的变更集中定义上下文。和括号。但是我没有找到将contexts=" V1.0 AND V2.0" 参数传递给 liquibase(通过命令行)的方法,因为每次我这样做时,liquibase 都会生成一个空的 SQL 文件。我就是这样尝试的:

 .\liquibase --url=offline:mssql? `
--changeLogFile="C:\Users\Ferid\Documents\Box Sync\PRIVATE_Ferid\liquibase-3.5.5-bin\cl.xml" `
--outputFile="C:\Users\Ferid\Documents\Box Sync\PRIVATE_Ferid\liquibase-3.5.5-bin\output.sql" `
--contexts="V1.0 AND V2.0" `
updatesql

当我只传递一个上下文或使用V1.0, V2.0 时它工作正常,以便他生成具有两个版本之一的所有变更集,但我只需要生成同时具有这两个上下文(V1.0 和 V2.0)的变更集。 0).

这是我的变更日志文件的上下文属性的示例

<changeSet author="Ferid" id="1536838228609-1" context="V1.0"> ... </changeSet>
<changeSet author="Ferid" id="1536838228609-2" context="V2.0"> ...</changeSet>

<changeSet author="Ferid" id="1536838228609-3" context="V1.0 AND V2.0"> ...</changeSet>

我尝试了不同的语法,但没有一个适合我。我正在使用 liquibase 3.5.5。

【问题讨论】:

    标签: command-line migration database-migration liquibase


    【解决方案1】:

    上下文最适合用于环境之类的事物(想想 DEV、STAGING、PRODUCTION)。对于您正在做的事情,最好使用标签。

    标签和上下文都可以用来控制变更集何时何地应用于不同的环境。它们经常相互结合使用。

    下表表达了一个关键区别:

                       labels             contexts
    in commands        expression         list
    in changelog       list               expression
    

    因此,当您定义变更日志时,每个变更集都可以有一个“标签”属性,该属性可以包含以逗号分隔的标签列表。每个变更集都可以有一个“上下文”属性,该属性可以包含一个复杂的上下文表达式。复杂的表达式类似于“qa or (acme_inc and dev)”

    相反,当使用命令(即部署)时,您可以为标签指定一个复杂的表达式,但只能是一个上下文列表。

    下面链接的文章深入探讨了,但总的来说,当您可以简单地枚举/描述 changeSet 的用途时,标签很有用,但部署时环境描述起来很复杂。当应该部署变更集的“上下文”是一个复杂的决定,最好留给变更集作者而不是部署者时,上下文很有用。

    可以在 Nathan 写的博客文章中了解有关 Liquibase 如何处理这些问题的更多信息:http://www.liquibase.org/2014/11/contexts-vs-labels.html

    【讨论】:

    • 这是一个好方法。非常感谢!也许在 liquibase 文档中包含标签(以及我不知道的其他 liquibase 函数)会很有用,因为我之前没有看到 Nathans 的博客文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多