Re: Way to create unique constraint in Postgres even with null columns - Mailing list pgsql-general

From Thomas Kellerer
Subject Re: Way to create unique constraint in Postgres even with null columns
Date
Msg-id jaub4g$rte$1@dough.gmane.org
Whole thread Raw
In response to Way to create unique constraint in Postgres even with null columns  (Mike Christensen <mike@kitchenpc.com>)
Responses Re: Way to create unique constraint in Postgres even with null columns
List pgsql-general
Mike Christensen wrote on 27.11.2011 22:18:
> I have a table with this layout:
>
>      CREATE TABLE Favorites
>      (
>        FavoriteId uuid NOT NULL, --Primary key
>        UserId uuid NOT NULL,
>        RecipeId uuid NOT NULL,
>        MenuId uuid
>      )
>
> I want to create a unique constraint similar to this:
>
>      ALTER TABLE Favorites ADD CONSTRAINT Favorites_UniqueFavorite
> UNIQUE(UserId, MenuId, RecipeId);
>
> However, this will allow multiple rows with the same UserId and
> RecipeId, if the MenuId is null.  I want to allow a NULL MenuId to
> store a favorite that has no associated menu, but I only want at most
> one of these rows per user/recipe pair.

In addition to the above unique constraint you will need another one:

CREATE UNIQUE INDEX Favorites_UniqueFavorite
    ON (UserId, MenuId)
    WHERE RecipeId IS NULL;




pgsql-general by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: Way to create unique constraint in Postgres even with null columns
Next
From: Mike Christensen
Date:
Subject: Re: Way to create unique constraint in Postgres even with null columns