Create a partial unique index on is_default.

Am 11. Oktober 2015 09:41:08 MESZ, schrieb Jason Dusek <jason.du...@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.

Reply via email to