Postgres两列上的唯一约束:整数和布尔值

时间:2012-06-13 12:33:25

标签: postgresql constraints unique

我想找到一种方法来为我的数据库中的一个主题存储多个地址,每个主题只有一个默认地址。

简而言之,请假设我们有一张桌子:

CREATE TABLE test
(
  id integer NOT NULL,
  active boolean NOT NULL,
  CONSTRAINT pk_id PRIMARY KEY (id)
)

对于表中的每个id,最多只能有1个真有效值。

我怎么能实现这个目标?

感谢。

2 个答案:

答案 0 :(得分:13)

Partial index就是你想要的:

create unique index some_index on test (id) where active;

由于@ThiefMaster声明应删除主要索引。

答案 1 :(得分:3)

在本课题中,如前所述,不需要它。

但仅供参考,您可以将约束设置为具有不同类型的2个或更多(非主键)列。例如:

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (integer_column, boolean_column);

有关详细信息,请参阅Constraints的Postgres文档,“唯一约束”部分。引用:

  

如果唯一约束引用一组列,则列以逗号分隔列列出来......

     

这指定指示列中值的组合在整个表中是唯一的,但任何一列都不需要(通常不是)唯一。

注意: partial index设置在表的子集上构建的索引,其目的完全不同。