liquibase:按列检查复合索引

时间:2014-11-02 16:21:10

标签: database indexing liquibase

在创建复合索引之前,我们正在尝试检查liquibase前置条件。原因是:我们销售软件的公司在我们的数据库上运行优化更改集,我们现在也希望将其包含在我们的数据库中。但是我们不知道他们使用的索引的名称。

到目前为止我们有这个:

<changeSet id="changeset-id" author="great-author">
    <preConditions onFail="MARK_RAN">
        <not>
            <and>
                <indexExists indexName="idx_fields"/>
                <indexExists tableName="my_table" columnNames="id,name"/>
            </and>
        </not>
    </preConditions>
    <createIndex tableName="my_table" indexName="idx_fields">
        <column name="id"/>
        <column name="name"/>
    </createIndex>
</changeSet>

现在客户在此db上手动运行此更改:

create index company_schema.IDX1_FIELDS on company_schema.MY_TABLE("ID", "NAME") TABLESPACE USERS;

然后我们的变更集失败,部署陷入困境。

似乎我们的第二个先决条件是按列名检查复合索引是不起作用。

谁能在这里帮助我们?

1 个答案:

答案 0 :(得分:1)

如果内置的indexExists前提条件不使用多列索引,那么最好的选择是使用<sqlCheck>和自定义SQL查询,该查询使用数据库元数据视图来查找索引正确。

该查询究竟取决于数据库。