我有如下表格(Postgresql 9.3):
CREATE TABLE tab
(
id integer NOT NULL;
name citext NOT NULL,
isdefault boolean default false
);
我想添加一个
check
不接受多个带有isdefault = True
的记录。我知道我可以用triggers
来做,但我读到了关于Check Constraints
的文章,想知道是否可以用它来做。 最佳答案
使用部分唯一索引:
create unique index on tab (isdefault)
where isdefault ;
这样,您还可以在该列中存储
false
。我个人更喜欢将boolean
列设置为not null
,这样就不必处理布尔表达式中的null
值,而只需处理true
或false
。where
子句只对具有“cc>”的行进行索引。带有isdefault = true
(或空)的行没有索引。因此索引从不包含多行。索引列在这里并不重要。如果经常查询name列(针对该行),则可能需要在该列上创建索引,以便查询可以从索引中获取所有内容。