代码之家  ›  专栏  ›  技术社区  ›  Nona

创建一个唯一的约束,其中一列可以为null,以防止重复记录插入

  •  0
  • Nona  · 技术社区  · 4 年前

    在Postgres 13.4中,试图创建一个唯一的约束,其中cars表中的记录在名称和用户id上是唯一的。购买的日期以NULL开头,但一旦购买了一辆车,就可以更改为一个值。我运行了以下操作,但出现语法错误:

    ALTER TABLE cars 
       ADD CONSTRAINT cars_user_id_name_purchased_at_key 
       UNIQUE (user_id, name) 
    WHERE purchased_at IS NULL
    

    错误:

    错误42601(语法错误)语法错误位于或接近“WHERE”

    问题是什么?如何解决?

    0 回复  |  直到 4 年前
        1
  •  0
  •   Laurenz Albe    4 年前

    你不能有一个 WHERE 子句,但部分唯一索引将起到以下作用:

    CREATE UNIQUE INDEX ON cars (user_id, name) 
    WHERE purchased_at IS NULL;