特定于环境的SQL链接服务器和同义词定义

时间:2016-04-01 13:55:20

标签: liquibase

我们正在尝试将Liquibase用于SQL Server,并对上下文和标签有疑问。在部署到我们的Dev,TST和Prod环境时,我们使用了特定于env的sql server同义词和链接服务器。例如,在部署到TST时,链接服务器和同义词将指向SERVER_A,但Prod应指向SERVER_B。有没有办法让Liquibase根据我们在发布时部署的环境自动交换正确的SERVER值?

1 个答案:

答案 0 :(得分:0)

用于支持此功能的Liquibase功能包括labels, contextschangelog parameters。您可能在更改日志中有类似的内容:

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <property name="linked.server" value="SERVER_A" context="TST"/>
    <property name="linked.server" value="SERVER_B" context="Prod"/>

    <changeSet id="1" author="Brian">
         <sql>CREATE LINKED SERVER STATEMENT SO LINKED SERVER IS ${linked.server}</sql>
    </changeSet>
</databaseChangeLog>

我不知道用于创建所需内容的Sql Server语法,因此该示例并不完全正确,但主要的是您可以在其中使用变量引用${linked.server}。 SQL Server同义词或链接服务器没有内置的Liquibase重构,因此您可以使用<sql>标记或编写自己的Liquibase扩展来实现新的<synonym>和/或{{ 1}}标签。

当您运行<linkedServer>时,您将提供参数

liquibase update--context=TST

并取代适当的值。