为PostgreSQL中的两个唯一字段设置约束

时间:2012-05-28 12:05:21

标签: postgresql constraints

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

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

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

2 个答案:

答案 0 :(得分:3)

您可以执行您已经在考虑的事项:在两个字段上创建唯一约束。这样,将在幕后创建唯一索引,您将获得所需的行为。此外,information_schema可以获取该信息,以便在必要时根据两者都需要进行独特的元数据推断。我会推荐这个选项。您也可以使用触发器,但唯一约束对于此特定要求更好。

答案 1 :(得分: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不是唯一的。