Re: There can be only one

Поиск
Список
Период
Сортировка
От Andreas Kretschmer
Тема Re: There can be only one
Дата
Msg-id 02B841CE-A594-4210-9C0C-45C4CFF7E571@a-kretschmer.de
обсуждение исходный текст
Ответ на There can be only one  (Jason Dusek <jason.dusek@gmail.com>)
Ответы Re: There can be only one
Список pgsql-general
Create a partial unique index on is_default.

Am 11. Oktober 2015 09:41:08 MESZ, schrieb Jason Dusek <jason.dusek@gmail.com>:

Consider a table of providers, for which one is the default. For example, payment providers:

CREATE TABLE payment_via ( id            uuid PRIMARY KEY, provider      text NOT NULL, keys          hstore NOT NULL DEFAULT ''
);

Here we store together the name of the provider — medici, paypal — with access tokens needed to use a certain payment account. How shall we store which one is the default? Ideally, we’d be able to ensure there is but one default.

CREATE TABLE payment_via ( id            uuid PRIMARY KEY, provider      text NOT NULL, keys          hstore NOT NULL DEFAULT '', is_default    boolean NOT NULL DEFAULT FALSE
);

How shall we state the constraint? The obvious thing would seem to be:

CREATE TABLE payment_via ( id            uuid PRIMARY KEY, provider      text NOT NULL, keys          hstore NOT NULL DEFAULT '', is_default    boolean NOT NULL DEFAULT FALSE, EXCLUDE (is_default USING AND)
);

However, this is a syntax error. There is always:

CREATE TABLE payment_via ( id            uuid PRIMARY KEY, provider      text NOT NULL, keys          hstore NOT NULL DEFAULT '', is_default    boolean NOT NULL DEFAULT FALSE, EXCLUDE (is_default USING =) WHERE (is_default)
);

but this seems awkward and I was hoping there was some way to use AND as an operator.


--
Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.

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

Предыдущее
От: Jason Dusek
Дата:
Сообщение: There can be only one
Следующее
От: Andreas Kretschmer
Дата:
Сообщение: Re: There can be only one