Re: EXCLUDE constraint with not equals

Поиск
Список
Период
Сортировка
От Emre Hasegeli
Тема Re: EXCLUDE constraint with not equals
Дата
Msg-id CAE2gYzyqWzyyUCXRcqgthcGqjsHX=zNWHVMN2myrEEqduaJSyQ@mail.gmail.com
обсуждение исходный текст
Ответ на EXCLUDE constraint with not equals  (Kai Groner <kai@gronr.com>)
Ответы Re: EXCLUDE constraint with not equals  (Kai Groner <kai@gronr.com>)
Список pgsql-general
> Given the following table, I would like to ensure that all the rows for an
> email that have a user defined map to the same user.
>
> CREATE TABLE person (
>   id INTEGER PRIMARY KEY,
>   user TEXT,
>   email TEXT NOT NULL);
>
>
> What I think I'm looking for is something like this:
>
> CREATE TABLE person (
>   id INTEGER PRIMARY KEY,
>   user TEXT,
>   email TEXT NOT NULL,
>   EXCLUDE (email WITH =, user WITH <>)
>     WHERE (user IS NOT NULL));
>
> The not equals comparison isn't supported, but it would be useful here.
>
> Is there another way to do this, short of creating a separate table that
> associates email and user?

You can use the btree_gist extension from contrib:

CREATE EXTENSION btree_gist;

CREATE TABLE person (
  id INTEGER PRIMARY KEY,
  "user" TEXT,
  email TEXT NOT NULL,
  EXCLUDE USING gist (email WITH =, "user" WITH <>)
    WHERE ("user" IS NOT NULL));


В списке pgsql-general по дате отправления:

Предыдущее
От: David Kerr
Дата:
Сообщение: Re: Replication fell out of sync
Следующее
От: Igor Stassiy
Дата:
Сообщение: ANALYZE command question