如何使用Liquibase创建分区表

5

我能够创建如下分区表吗:

CREATE TABLE person(
    id INT NOT NULL,
    NAME VARCHAR(30),
    borned TIMESTAMP)
PARTITION BY RANGE (UNIX_TIMESTAMP(borned)) (
    PARTITION p0 VALUES LESS THAN (UNIX_TIMESTAMP('2000-01-01 00:00:00')),
    PARTITION p1 VALUES LESS THAN (MAXVALUE));

您是否想使用liquibase标签?我指的是不使用自定义的<sql>标签,而是使用<createTable>标签。

2个回答

12

自1.9版本起: 您可以使用modifySql来追加到createTable的输出中。

<changeSet author="StackOverflow" id="C0FE77AA-5517-11E7-8CAD-224C16886A7C">
    <createTable tableName="test">
        <column name="id" type="INT">
            <constraints nullable="false"/>
        </column>
        <column name="NAME" type="VARCHAR(30)"/>
        <column name="borned" type="TIMESTAMP"/>
    </createTable>
    <modifySql dbms="postgresql">
        <append value=" PARTITION BY RANGE (UNIX_TIMESTAMP(borned)) (
PARTITION p0 VALUES LESS THAN (UNIX_TIMESTAMP('2000-01-01 00:00:00')),
PARTITION p1 VALUES LESS THAN (MAXVALUE))"/>
    </modifySql>
</changeSet>

Liquibase 会根据 updateSql 目标输出以下 SQL:

CREATE TABLE db.test (id INT NOT NULL, NAME VARCHAR(30) NULL, borned timestamp NULL) PARTITION BY RANGE (UNIX_TIMESTAMP(borned)) (     PARTITION p0 VALUES LESS THAN (UNIX_TIMESTAMP('2000-01-01 00:00:00')),     PARTITION p1 VALUES LESS THAN (MAXVALUE));

1
请问您能分享一下,我该如何在yaml中构建相同的内容?(尤其是modifySql部分) - LEVEL
1
如果表已经创建,我如何在不删除现有表的情况下添加“partition by”? - arjun
只有当表格及其列没有注释时,它才能正常工作。 - ka3ak

0

如果不编写自己的自定义更改标签(就像Datical所做的那样),则无法实现。


谢谢,但这并不是在一个为期三年的项目中迁移到其他数据库迁移工具的原因。 - Vova Yatsyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接