Как создать индекс в Liquibase со столбцом из другой таблицы? - PullRequest
1 голос
/ 16 апреля 2019

Я хочу создать индекс для конкретного вызова sql, в котором я объединяю две таблицы и не знаю, как вставить внешний столбец.

Это то, что у меня сейчас есть:

<changeSet id="1234" author="name" >
        <createIndex catalogName="catalog"
                indexName="idx-master"
                tableName="table-a">
            <column name="type"/>
            <column name="id"/>
            <column name="date"/>
        </createIndex>
</changeSet>

Я ищу что-то вроде столбца тега, в котором я могу передать имя внешнего столбца, поэтому он может выглядеть так:

<changeSet id="1234" author="name" >
        <createIndex catalogName="catalog"
                indexName="idx-master"
                tableName="table-a">
            <column name="type"/>
            <column name="id"/>
            <column name="date"/>
                <column name="date-from-table-b">
        </createIndex>
</changeSet>

Спасибо

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Обратите внимание, что индекс для разных таблиц, вероятно, является специфической функциональностью системы базы данных (я не знаю о СУБД, которая поддерживает это, но некоторые могут).Поэтому a) маловероятно, что liquibase поддерживает его с общими функциями, и b) если вы добавите пользовательский оператор SQL для создания этого индекса, ваша спецификация liquibase больше не будет зависеть от системы базы данных.

Последнее, возможно, не является одной из причин, по которой вы используете ликвидазу, но Я бы все же заставляет задуматься над изменением структуры таблицы .Это указывает на проблему дизайна.Иногда целесообразно создать отдельную таблицу для таких специальных поисков или хранить данные, объединенные в целом.

Самое близкое, что вы могли бы получить с общими функциями, - это создать свой индекс, как вы уже записали его в вопросе, ииметь дополнительный индекс из одной колонки на дату в вашей объединенной таблице.

1 голос
/ 16 апреля 2019

Я не думаю, что это возможно с помощью специальных тегов liqubiase, но вы всегда можете использовать тег <sql> и создать его в виде простого SQL.

Таким образом:

<changeSet id="foo" author="bar">
    <sql>
        CREATE INDEX some_index ON ...
    </sql>
</changeSet>
...