我想找到一种方法来为我的数据库中的一个主题存储多个地址,每个主题只有一个默认地址。
简而言之,请假设我们有一张桌子:
CREATE TABLE test
(
id integer NOT NULL,
active boolean NOT NULL,
CONSTRAINT pk_id PRIMARY KEY (id)
)
对于表中的每个id,最多只能有1个真有效值。
我怎么能实现这个目标?
感谢。
答案 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设置在表的子集上构建的索引,其目的完全不同。