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: | Whole Thread | Raw Message | 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.
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 |