Command line 用AND分解上下文

Command line 用AND分解上下文,command-line,migration,database-migration,liquibase,Command Line,Migration,Database Migration,Liquibase,在中,可以在用AND、OR、指定的变更集中定义上下文!和括号。但是我没有找到一种方法将contexts=“V1.0和V2.0”参数传递给liquibase(通过命令行),因为每次我这样做时,liquibase都会生成一个空的SQL文件。我就是这样尝试的: .\liquibase --url=offline:mssql? ` --changeLogFile="C:\Users\Ferid\Documents\Box Sync\PRIVATE_Ferid\liquibase-3.5.5-bin\c

在中,可以在用AND、OR、指定的变更集中定义上下文!和括号。但是我没有找到一种方法将
contexts=“V1.0和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)的变更集

下面是我的changelog文件的上下文属性的示例

<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。

上下文最好用于环境之类的事情(想想开发、登台、生产)。对于您正在做的事情,最好使用标签

标签和上下文都可用于控制变更集应用于不同环境的位置和时间。它们经常一起使用

本表中表示了一个关键差异:

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

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

下面链接的文章进行了深入讨论,但一般来说,当您可以简单地枚举/描述变更集的用途时,标签是有用的,但是部署时环境很难描述。当应该在其中部署变更集的“上下文”是一个复杂的决策,最好由变更集作者而不是部署者来决定时,上下文非常有用


Nathan在一篇博文中写道:

上下文最适合用于环境之类的事情(想想开发、登台、生产)。对于您正在做的事情,最好使用标签

标签和上下文都可用于控制变更集应用于不同环境的位置和时间。它们经常一起使用

本表中表示了一个关键差异:

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

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

下面链接的文章进行了深入讨论,但一般来说,当您可以简单地枚举/描述变更集的用途时,标签是有用的,但是部署时环境很难描述。当应该在其中部署变更集的“上下文”是一个复杂的决策,最好由变更集作者而不是部署者来决定时,上下文非常有用


Nathan在一篇博文中写道:“这是一个很好的方法。”。非常感谢你!也许在liquibase文档中包含标签(可能还有其他我不知道的liquibase函数)会很有用,因为我以前没有看到Nathans的博客文章。这是一个很好的方法。非常感谢你!也许在liquibase文档中包含标签(可能还有其他我不知道的liquibase函数)会很有用,因为我以前没有看到Nathans的博客文章。