postgres 是否允许多列索引中存在空值?

问题描述 投票:0回答:2

我想在表上创建多列索引(A、B、C),其中 C 是可为空列。当C为空时该索引会存储值吗? Oracle 似乎允许这样做,但不确定 Postgres 是否如此。

sql postgresql indexing null unique-constraint
2个回答
7
投票

是的,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;

2
投票

PostgreSQL 将

NULL
视为
distinct
值,因此,带有索引的列中可以有多个 NULL 值。

© www.soinside.com 2019 - 2024. All rights reserved.