在创建复合索引之前,我们正在尝试检查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;
然后我们的变更集失败,部署陷入困境。
似乎我们的第二个先决条件是按列名检查复合索引是不起作用。
谁能在这里帮助我们?
答案 0 :(得分:1)
如果内置的indexExists前提条件不使用多列索引,那么最好的选择是使用<sqlCheck>
和自定义SQL查询,该查询使用数据库元数据视图来查找索引正确。
该查询究竟取决于数据库。