There can be only one

From: Jason Dusek <jason(dot)dusek(at)gmail(dot)com>
To: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: There can be only one
Date: 2015-10-11 07:41:08
Message-ID: CAO3NbwOJvRC844dneJ8XG4X4mr7a6gajeS9LhwZ-Cj-b2SMdYw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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.

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Andreas Kretschmer 2015-10-11 09:14:27 Re: There can be only one
Previous Message Chuck Martin 2015-10-10 20:03:40 Re: Trouble setting up replication