我熟悉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中基于函数的索引,但是不确定如何准确地转换它。请帮忙。
答案 0 :(得分:0)
您可能将带有COALESCE
或NVL
的基于等效函数的索引用于在Postgres中模拟该部分索引。
CREATE UNIQUE INDEX ind_typ_uniq ON
yourtab_name ( coalesce(
col1,
col3
),
col2
);
这不会像Postgres中那样创建两个不同的Partial Btree索引。但是,优化器可以对基于函数的索引使用索引范围扫描,以查询在WHERE
子句中包含此类表达式的查询。
由于您需要LOCAL INDEX
,因此可以在末尾指定LOCAL关键字。但是,请注意,分区键应作为列列表的子集出现,因为它被定义为UNIQUE
索引。