liquibase数据库重构xml createIndex

时间:2014-12-15 21:47:04

标签: xml postgresql liquibase

回答这个问题:Postgres table constraint using group-by, 我正在尝试将以下Postgres代码翻译成liquibase XML

create unique index idx_table on table(subcategory, base_unit)
where base_unit;

我试过了:

<createIndex indexName="idx_table"
    tableName="table"
    unique="true">
    <columnNames="subcategory, base_unit"/>
    <where>base_unit</where>
</createIndex>

但这给了我错误:     元素类型“columnNames”必须后跟属性规范“&gt;”或“/&gt;”。

更新

<createIndex indexName="idx_table"
    tableName="table"
    unique="true">
    <column name="subcategory"/>
    <column name="base_unit"/>
    <where>base_unit</where>
</createIndex>

导致错误:

Invalid content was found starting with element 'where'. One of '{"liquibase.org/xml/ns/dbchangelog":column}' is expected.

2 个答案:

答案 0 :(得分:1)

Liquibase目前不支持createIndex中的“where”部分。

您将需要使用modifySql:

<changeSet id="YOUR_ID" author="YOU">
    <createIndex indexName="idx_table"
                 tableName="table"
                 unique="true">
        <column name="subcategory"/>
        <column name="base_unit"/>
    </createIndex>
    <modifySql>
        <append value=" where base_unit"/>
    </modifySql>
</changeSet>

或直接使用sql:

<changeSet id="YOUR_ID" author="YOU">
    <sql>create unique index idx_table on table(subcategory, base_unit) where base_unit</sql>
</changeSet>

答案 1 :(得分:0)

我认为你的xml应该是这样的:

<createIndex indexName="idx_table"
    tableName="table"
    unique="true">
    <column name="subcategory"/>
    <column name="base_unit"/>
    <where>base_unit</where>
</createIndex>