繁体   English   中英

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

[英]Setting constraint for two unique fields in PostgreSQL

我是Postgres的新手。 我想知道,PostgreSQL如何为几个唯一值设置约束(以便每个对都是唯一的)。 我应该为barbaz字段创建INDEX吗?

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

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

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

如果每个字段本身都需要唯一,则在每个字段上创建唯一索引。 如果它们仅需要在组合中唯一,则可以在两个字段之间创建一个唯一索引。

如果需要,请不要忘记将每个字段设置为“非空”。 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不是唯一的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM