仅在列 > 0 时限制“重复”

Dav*_*och 3 postgresql constraint unique-constraint postgresql-9.6

我有一个表,其中一fk列应该是唯一的,当另一int列是> 0. 如果这句话没有意义,以下是有效行的示例:

CREATE TABLE foo
AS
  SELECT fk,int
  FROM ( VALUES
    ( 1, -12 ),
    ( 1,  20 ),
    ( 1,   0 )
  ) AS (fk, int);
Run Code Online (Sandbox Code Playgroud)

向表中添加一个fk值为 的新行1和一int列是> 0无效的。

有没有办法用约束或索引来做到这一点?我觉得排除约束几乎让我到达那里,但我无法找到让它工作的方法。

我正在使用 Postgres 9.6.2。

小智 6

添加条件唯一索引

CREATE UNIQUE INDEX IndexName ON foo (fk) WHERE (int>0);
Run Code Online (Sandbox Code Playgroud)

dbfiddle在这里