查看liquibase文档http://www.liquibase.org/documentation/changes/create_index.html,使用create index时无法使用CIC,因为liquibase没有用于指定并发选项的标记。
有没有办法与liquibase同时创建索引?
答案 0 :(得分:1)
您可以将WCHAR*
指定为runInTransaction
以同时创建索引。
答案 1 :(得分:0)
创建并发索引必须使用任意sql change:
<changeSet runInTransaction="false" id="10-add-widgets-kind-index" author="username">
<sql dbms="postgresql">
CREATE INDEX CONCURRENTLY
IF NOT EXISTS idx_widgets_kind
ON widgets(kind)
</sql>
</changeSet>
答案 2 :(得分:0)
以前的答案就可以了。我想提供一种替代方案,它不能直接回答OP的问题,但是可以提供具有相同最终结果的解决方案,并具有一些额外的优势。对于像我一样迷失于此答案的人们,我觉得向他们展示其他选择是很好的。
为了仅使用Liquibase创建索引,您将需要使用<sql>
标签。我警告不要这样做,因为如果出于任何原因(开发,评估,测试等)使用其他数据库,这可能会导致意外的后果。 sql语句将被跳过,您可能会以为实际上没有添加索引就可以了。
另外,如果您在生产系统上运行此迁移而不将其拆下来进行维护,并且迁移是构建过程的一部分,则这可能会导致迁移控制较少。
我建议直接在Postgres上创建索引,并通常使用Liquibase和前提条件检查来添加索引迁移。
首先,手动添加索引:
CREATE INDEX CONCURRENTLY widgets_kind_idx ON widgets (kind);
然后将其添加到您的Liquibase changeSet中:
<changeSet id="10-add-widgets-kind-index" author="username">
<preConditions onFail="MARK_RAN">
<not>
<indexExists indexName="widgets_kind_idx" />
</not>
</preConditions>
<createIndex tableName="widgets" indexName="widgets_kind_idx">
<column name="kind" />
</createIndex>
</changeSet>
这提供了以任何所需方式添加索引的功能,并使Liquibase迁移保持已知状态。正在建立的新数据库将不需要CONCURRENTLY
关键字。