在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的多个表空间。有没有办法做到这一点?
答案 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>