如何强制执行具有唯一值postgresql的唯一列

How to enforce unique column with unique value postgresql

是否可以在 postgres 中强制使用唯一值和唯一列?我正在使用 v.11。 它会是这样的:

状态 = 0 |商店 = 5

唯一(商店,状态 = 0)

那样的话,我可以有任何值存储,但是对于每个值,它只能有一个状态为0的记录,其余的可以是任何值? 我确信这个问题之前已经被问过,但它似乎特定于某些框架,如 django:

how to enforce a conditional uniqueness constraint

或者我找不到正确的答案。

我正在使用 loopback4,但似乎没有办法在框架中指定它,所以我想在数据库中指定它。 更新:为了更解释: 我有一个用户只能有一个带有商店的购物车,不能超过一个。每个购物车都有 user_id、store_id 和状态。当status为0时,购物车正在进行中,当status为1时,购物车已订购,当status为2时,由商店发货。 所以我有一个 table:

id | user_id | store_id | status
...|   1     |   1      | 0
...|   1     |   1      | 1
...|   1     |   1      | 1

以上,很好,应该被允许,但是:

id | user_id | store_id | status
...|   1     |   1      | 0
...|   1     |   1      | 0   <--- Not allowed
...|   1     |   1      | 1

这是不允许的,因为一次使用有多个商店的购物车。所以 status = 0 和 store_id 应该是唯一的。

您可以创建部分唯一索引:

create unique index on the_table (store)
where status = 0;