表中有三个字段:
approver: String
deleted: Boolean
user_id: Integer
有必要对添加事件的表进行例外处理。不允许有相同 user_id 的记录,deleted = false,approver - 不为空。
那些。以下情况是可以接受的:
approver: "Any1", deleted: true, user_id: 1
approver: "Any2", deleted: true, user_id: 1
approver: "Any3", deleted: false, user_id: 1
但这些不是:
approver: "Any1", deleted: true, user_id: 1
approver: "Any2", deleted: false, user_id: 1
approver: "Any3", deleted: false, user_id: 1
如何为 Postgres 编写这样的约束?
您需要一个部分 (
partial
) 唯一索引:这种部分唯一索引仅对满足条件的那些行施加唯一约束
where
。PS:也许我误解了“批准人不为空”的意思
1)在列的声明中,为字段指明NOT NULL(不允许没有值),例如:
2) 声明插入记录的触发器,其中将检查条件
3) 触发功能