首页 > 解决方案 > 在具有唯一性条件的列上创建唯一约束

问题描述

假设我有一个包含 3 列的表:

CREATE TABLE some_table(
    id BIGSERIAL PRIMARY KEY,
    name text NOT NULL,
    some_boolean boolean DEFAULT TRUE
);

我想在“名称”列上创建一个唯一约束,但它只需要在所有具有some_boolean = true. 例如,如果我有一个名为 as 的条目bananasome_booleanfalse可以创建另一个也称为banana.

更具体地说:我的表有一个expiration_date列,我需要名称在所有未过期的对象中是唯一的

标签: sqlpostgresqlunique-constraintunique-index

解决方案


条件唯一约束可以使用条件唯一索引来实现,如下所示:

CREATE UNIQUE INDEX some_table_Unq ON some_table (name) WHERE (some_boolean = TRUE);

db<>小提琴

你可以some_boolean = TRUEsome_boolean和 在你的情况下用expiration_date is null


推荐阅读