我想为特定的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>
谢谢
答案 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的原因之一,但是我会仍然重新考虑表结构的想法。这表明存在设计问题。有时候,值得为这样的特殊查找创建一个单独的表或存储通常连接的数据。
使用一般功能获得的最接近的结果是创建索引,就像您在问题中写下的那样,并在联接表中的日期有一个额外的单列索引。