首页 > 解决方案 > Postgresql 对一组值的排除约束

问题描述

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

| id | status |

状态可以取 3 个值:已预订、已开始、已完成

我需要一个满足以下要求的约束:

对于整组行,只有一条记录可以处于未完成状态:已预订或已开始。

我相信我需要一个排除约束,但我不知道可以指定什么运算符:

add constraint constraint_x   exclude (status with ANY?) 
   where  (status <> 'Completed')

这就是我想出的解决方案:

add constraint constraint_x exclude ((1) with =) where ((status) <> 'Completed')

这是一个好的吗?

标签: postgresql

解决方案


你的解决方案没问题。

我会用这样的部分唯一索引来解决这个问题:

CREATE UNIQUE INDEX ON table_name ((1)) WHERE status <> 'Completed';

推荐阅读