There can be only one

Поиск
Список
Период
Сортировка
От Jason Dusek
Тема There can be only one
Дата
Msg-id CAO3NbwOJvRC844dneJ8XG4X4mr7a6gajeS9LhwZ-Cj-b2SMdYw@mail.gmail.com
обсуждение исходный текст
Ответы Re: There can be only one
Список pgsql-general

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.

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

Предыдущее
От: Chuck Martin
Дата:
Сообщение: Re: Trouble setting up replication
Следующее
От: Andreas Kretschmer
Дата:
Сообщение: Re: There can be only one