3

我是postgres的新手。我想知道,PostgreSQL 为几个唯一值设置约束的方法是什么(这样每一对都是唯一的)。我应该创建一个INDEXforbarbaz字段吗?

CREATE UNIQUE INDEX foo ON table_name(bar, baz);

如果不是,那么正确的方法是什么?提前致谢。

4

2 回答 2

3

你可以做你已经想到的事情:在两个字段上创建一个唯一的约束。这样,将在幕后创建唯一索引,您将获得所需的行为。另外,如果有必要,可以获取该信息information_schema以进行一些元数据推断,因为两者都需要是唯一的。我会推荐这个选项。您也可以为此使用触发器,但是对于这个特定要求,唯一的约束要好得多。

于 2012-05-28T12:08:18.967 回答
3

如果每个字段都需要自己唯一,则在每个字段上创建唯一索引。如果它们只需要在组合中是唯一的,则在两个字段中创建一个唯一索引。

如果应该,不要忘记将每个字段设置为 NOT NULL。NULL 从来都不是唯一的,所以可能会发生这样的事情:

create table test (a int, b int);
create unique index test_a_b_unq on test (a,b);
insert into test values (NULL,1);
insert into test values (NULL,1);

并且没有错误。因为这两个 NULL 不是唯一的。

于 2012-05-29T04:49:55.823 回答