如何解决PostgreSQL约束仅允许许多可能的值之一
我的状态如下:started
,calculated
,finished
我需要一个约束,允许一个表中只有一个NOT finished
状态。
这是允许的:
+----+----------+
| id | status |
+----+----------+
| 1 | finished |
| 2 | finished |
| 3 | started |
+----+----------+
+----+------------+
| id | status |
+----+------------+
| 1 | finished |
| 2 | finished |
| 3 | calculated |
+----+------------+
由于两个未完成状态,这是禁止的:
+----+------------+
| id | status |
+----+------------+
| 1 | finished |
| 2 | finished |
| 3 | calculated |
| 4 | started |
+----+------------+
解决方法
您可以使用过滤唯一索引:
create unique index myindex
on mytable ((1))
where (status <> 'finished')
技巧是将固定值而不是列名传递给索引的on
子句(我们需要两个括号,因此Postgres会将其作为表达式求值)。这与where
子句结合使用,该子句过滤除“完成”之外的状态以实现所需的逻辑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。