如何用其他表中的列在Liquibase中创建索引?

时间:2019-04-16 09:14:23

标签: java sql liquibase

我想为特定的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>

我要寻找的是类似于tag列的东西,我可以在其中传递外部列的名称,因此可能像这样:

<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 个答案:

答案 0 :(得分:1)

我认为使用特殊的liqubiase标签是不可能的,但是您始终可以使用<sql>标签并在普通SQL中创建它。

因此:

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

答案 1 :(得分:1)

请注意,针对不同表的索引可能是数据库系统特定的功能(我不知道支持此功能的RDBMS,但有些可能)。因此,a)liquibase不太可能通过通用功能支持它; b)如果添加定制SQL语句来创建该索引,则liquibase规范将不再与数据库系统无关。

后者可能不是您使用liquibase的原因之一,但是我会仍然重新考虑表结构的想法。这表明存在设计问题。有时候,值得为这样的特殊查找创建一个单独的表或存储通常连接的数据。

使用一般功能获得的最接近的结果是创建索引,就像您在问题中写下的那样,并在联接表中的日期有一个额外的单列索引。