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

daupos2t  于 2022-11-07  发布在  DB2
关注(0)|答案(3)|浏览(174)

在DB2 LUW中,表、索引和“长对象”(即LOB)应该放置在不同的表空间中,这是recommended

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的多个表空间并不是这样。

yhxst69z

yhxst69z1#

您可以使用sql change,liquibase文档将其描述为:
“sql”标记允许您指定所需的任何sql。它对于Liquibase的自动重构标记不支持的复杂更改以及解决Liquibase的错误和限制非常有用。sql标记中包含的SQL可以是多行的。
它看起来像这样(从liquibase文档复制):

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

bt1cpqcv2#

这是Liquibase的Datical扩展所支持的,但Liquibase本身不支持。

4ktjp1zp

4ktjp1zp3#

我知道这是6岁,但我想我会张贴这作为另一个可能的解决方案。

<changeSet id="2" author="liquibase">
   <createTable catalogName="department2"
          remarks="A String"
          schemaName="public"
          tableName="person"
          tablespace="${tablespace}">
        <column name="address" type="varchar(255)"/>
     </createTable>
   </changeSet>

然后在命令行上定义表空间名称。

liquibase -Dtablespace='tablespaceQA' update

相关问题