我在PostgreSQL 9.4
。我有下表:
id name deleted
seril PK varchar(32) boolean NOT NULL
是否可以将UNIQUE
约束应用于deleted = false
的所有行?
答案 0 :(得分:4)
您可以使用部分索引来完成。
来自文档
当存在WHERE子句时,将创建部分索引。部分索引是一个索引,它只包含表的一部分的条目,通常是比索引的其余部分更有用的索引部分。例如,如果您的表包含已开票和未开单的订单,其中未开单的订单占据总表的一小部分,但这是一个经常使用的部分,您可以通过仅在该部分上创建索引来提高性能。另一个可能的应用是使用带有UNIQUE的WHERE来强制表的子集的唯一性。有关更多讨论,请参见第11.8节。
参考:http://www.postgresql.org/docs/9.4/static/sql-createindex.html
只是添加一个例子:
CREATE UNIQUE INDEX yourindexname onyourtable (seril)
WHERE deleted = false;
自Postgresql版本7.2起支持此功能。