将此Btree索引从Postgres转换为Oracle

时间:2018-08-05 08:01:58

标签: database oracle postgresql

我熟悉Oracle的Create Index语句,并且希望将这些特定的索引定义(从\d+ tab_name)获取到Oracle中的本地索引)转换。我必须在Oracle中完全转换这些索引定义。

"ind_typ1_name_uniq"   UNIQUE, btree (col1, col2) WHERE col1 IS NOT NULL

"ind_typ2_uniq" UNIQUE, btree (col3, col2) WHERE col1 IS NULL

我进行了一些探索,发现可能需要在Oracle中基于函数的索引,但是不确定如何准确地转换它。请帮忙。

1 个答案:

答案 0 :(得分:0)

您可能将带有COALESCENVL的基于等效函数的索引用于在Postgres中模拟该部分索引。

CREATE UNIQUE INDEX ind_typ_uniq ON
    yourtab_name ( coalesce(
        col1,
        col3
    ),
        col2
    );

这不会像Postgres中那样创建两个不同的Partial Btree索引。但是,优化器可以对基于函数的索引使用索引范围扫描,以查询在WHERE子句中包含此类表达式的查询。

由于您需要LOCAL INDEX,因此可以在末尾指定LOCAL关键字。但是,请注意,分区键应作为列列表的子集出现,因为它被定义为UNIQUE索引。