如何强制执行具有唯一值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;
是否可以在 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;