我想在表上创建多列索引(A、B、C),其中 C 是可为空列。当C为空时该索引会存储值吗? Oracle 似乎允许这样做,但不确定 Postgres 是否如此。
是的,NULL 值将存储在索引中,与 Oracle 不同,如果all列值为空,情况也是如此。
Oracle 和 Postgres 在处理具有空值的 unique 索引方面存在差异:
以下内容在 Postgres 中有效,但在 Oracle 中会失败
create table test (a int, b int, c int);
create unique index on test(a, b, c);
insert into test values (1,1,null);
insert into test values (1,1,null);
编辑
自 Postgres 15 起,可以在 Postgres 中更改此行为:
以下索引将不允许上述两个插入
create unique index on test(a, b, c) nulls not distinct;
PostgreSQL 将
NULL
视为 distinct
值,因此,带有索引的列中可以有多个 NULL 值。