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>

теперь, когда клиент запустил это изменение вручную в этой базе данных:

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

Затем наши наборы изменений не работают, и развертывание застревает.

Похоже, что наше второе предварительное условие, которое проверяет составной индекс по именам столбцов, не работает.

Кто может нам здесь помочь?


person Thomas Solti    schedule 02.11.2014    source источник
comment
Похоже, у этой проблемы нет решения. Вы можете проверять индексы только по имени, а не по столбцу. По крайней мере, другого решения я не нашел.   -  person Thomas Solti    schedule 05.11.2014


Ответы (1)


Если встроенное предварительное условие indexExists не работает с индексами с несколькими столбцами, лучшим вариантом будет использование <sqlCheck> с настраиваемым запросом SQL, который использует представления метаданных базы данных для правильного поиска индекса.

Что это за запрос, будет зависеть от базы данных.

person Nathan Voxland    schedule 06.11.2014
comment
Я согласен. Я не проверял, работает ли это так, но похоже на то, что нужно. Теперь мы используем имена индексов в предусловии. Спасибо за ваш ответ! - person Thomas Solti; 07.11.2014