postgresql - 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')
这是一个好的吗?
解决方案
你的解决方案没问题。
我会用这样的部分唯一索引来解决这个问题:
CREATE UNIQUE INDEX ON table_name ((1)) WHERE status <> 'Completed';
推荐阅读
- java - Java.lang.ClassNotFoundException:找不到类 io.reactivex.functions.Action
- docker - jBPM:无法在开发模式下启动业务应用程序
- algorithm - 为什么邻接表中的操作是 O(|E|/|V|)$?
- three.js - 如何选择一个对象并将相机移动到另一个位置?
- node.js - 如何在 nodejs 中设置 redis 缓存并正确使用?
- crystal-lang - 标准输入准备好了吗?(水晶朗)
- sql - 我的问题是关于 SQL,在 MS Access 的子查询中使用 TOP 函数
- assembly - 我的代码行中的“hello world”有什么问题?
- javascript - 在 javascript (lodash) 中合并部分重复的数组
- javascript - How to import a variable from a JS file in another JS file that uses Vue CDN? - Uncaught SyntaxError: Unexpected identifier