如何扩展由Liquibase实现的db模式?

时间:2013-12-06 05:17:43

标签: java oracle postgresql liquibase

我们有一个产品,我们希望使用liquibase来实现/重新实现db模式。然后,需要在可能在架构上存在差异的生产站点级别进行扩展。站点架构可以彼此不同,即具有额外的站点特定表,额外列等。

那么,Liquibase实现的db模式如何在站点级别进行扩展?即,如何扩展Liquibase项目,以便可以实施特定于站点的变更集?

P.S。我们通常有Oracle和Postgres解决方案。

2 个答案:

答案 0 :(得分:3)

Liquibase具有“上下文”的概念,可用于描述特定于给定环境的更改。通常,这些用于开发环境,测试或登台环境等,但它们是完全通用的,也可以用于不同的站点。

以下是有关该文件的文件:http://www.liquibase.org/documentation/contexts.html

答案 1 :(得分:1)

除了@SteveDonie所说的还有另一种可能的解决方案或者混合解决方案。在源代码结构中,您可以存储标准代码和自定义代码。然后,您可以使用Liquibase允许您使用的原始sql更改日志文件。

所以有一个像这样的文件夹结构:

DbCode
      |
      |---Standard
                  |---Tables
                            |---employee.sql
                            |---sale.sql
                   |---Schemas
                              |---public.sql
      |---Site1
                  |---Tables
                            |---site1_specific_table.sql
                   |---Schemas
                              |---site1.sql
      |---Site2
                  |---Tables
                            |---site2_specific_table.sql
                   |---Schemas
                              |---site2.sql

在Standard文件夹的根文件夹中放置0_Main.xml。当您使用此文件运行liquibase时,它将为标准数据库构建创建升级。但是,如果我们添加自定义网站,我们将获得特定于该网站的升级。这将允许您在标准文件夹和给定站点文件夹下的任何站点特定代码下存储常用或我称为标准代码的一次。所以我们将0_Main.xml放在Site1和Site2下。

C:\ DbCode \ Standard \ 0_Main.xml如下所示:

<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-2.0.xsd
    http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <includeAll  path="C:/ProjectX/Standard/Schemas"/>
    <includeAll  path="C:/ProjectX/Standard/Tables"/>
    <includeAll  path="C:/ProjectX/Standard/ForeignKeys"/>

</databaseChangeLog>

C:\ DbCode \ Site1 \ 0_Main.xml如下所示:

<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-2.0.xsd
    http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <includeAll  path="C:/ProjectX/Standard/Schemas"/>
    <includeAll  path="C:/ProjectX/Standard/Tables"/>
    <includeAll  path="C:/ProjectX/Standard/ForeignKeys"/>

    <includeAll  path="C:/ProjectX/Site1/Schemas"/>
    <includeAll  path="C:/ProjectX/Site1/Tables"/>
    <includeAll  path="C:/ProjectX/Site1/ForeignKeys"/>

</databaseChangeLog> 

C:\ DbCode \ Site2 \ 0_Main.xml如下所示:

<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-2.0.xsd
    http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <includeAll  path="C:/ProjectX/Standard/Schemas"/>
    <includeAll  path="C:/ProjectX/Standard/Tables"/>
    <includeAll  path="C:/ProjectX/Standard/ForeignKeys"/>

    <includeAll  path="C:/ProjectX/Site2/Schemas"/>
    <includeAll  path="C:/ProjectX/Site2/Tables"/>
    <includeAll  path="C:/ProjectX/Site2/ForeignKeys"/>

</databaseChangeLog>

使用这些配置,您可以为标准版本和\或Site1或Site2版本构建代码。

includeAll标记告诉liquibase进入给定目录并获取所有脚本。因此,首先将includeAll添加到Standard文件夹,然后在我们对其文件夹调用includeAll时,将所有标准对象添加到升级中,然后是所有特定于站点的脚本。