Liquibase可以使用DB2的多个表空间吗?

时间:2015-01-29 12:47:23

标签: db2 liquibase db2-luw

在DB2 LUW中,recommended表,索引和“长对象”(即LOB)应放在单独的表空间中。我们现有的SQL脚本包含这样的行:

CREATE TABLE "APPLICATIONTABLE"(
    APPLICATIONID INTEGER NOT NULL,
    APPLICATIONNAME VARCHAR(30) NOT NULL
)IN USERSPACE1 INDEX IN USERSPACE2 LONG IN USERSPACE3;

在变更集中,我们可以指定一个表空间:

<createTable tableName="APPLICATIONTABLE" tablespace="${tablespace.data}">
    <column name="APPLICATIONID" type="NUMBER(4, 0)">
        <constraints nullable="false"/>
    </column>
    <column name="APPLICATIONNAME" type="VARCHAR(30)">
        <constraints nullable="false"/>
    </column>
</createTable>

但是,据我所知,DB2的多个表空间。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

Liquibase的Datical扩展支持这一点,而Liquibase本身则不支持。

答案 1 :(得分:1)

您可以使用liquibase doc描述为的sql change

  

'sql'标签允许你指定你想要的任何sql。它对于Liquibase的自动重构标记不支持的复杂更改非常有用,可以解决Liquibase的漏洞和限制。 sql标记中包含的SQL可以是多行的。

它看起来像这样(从liquibase doc中复制):

<changeSet author="liquibase-docs" id="sql-example">
    <sql dbms="h2, oracle"
            endDelimiter="\nGO"
            splitStatements="true"
            stripComments="true">insert into person (name) values ('Bob')
        <comment>What about Bob?</comment>
    </sql>
</changeSet>

修改

阅读此answer后,我们看到了另一个选项。 您可以使用modifySql标记。也许省略表空间信息,然后像这样添加它(未经测试的代码 - 只是一个建议):

<createTable tableName="APPLICATIONTABLE">
    <column name="APPLICATIONID" type="NUMBER(4, 0)">
        <constraints nullable="false"/>
    </column>
    <column name="APPLICATIONNAME" type="VARCHAR(30)">
        <constraints nullable="false"/>
    </column>
    <modifySql dbms="db2">
        <append value=" IN USERSPACE1 INDEX IN USERSPACE2 LONG IN USERSPACE3"/>
    </modifySql>
</createTable>