Deferrable conditional unique constraints

From: Andreas Joseph Krogh <andreak(at)officenet(dot)no>
To: "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org>
Subject: Deferrable conditional unique constraints
Date: 2014-01-22 01:34:09
Message-ID: OfficeNetEmail.7f.a52908c3a63a3238.143b78be439@prod2
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

I know I can create a deferrable constraint trigger to accomplish this but it
would be cool if one could do it with regular unique constraint.   I'm trying
to enforce that a company can only have *one* "is_preferred" business-field,
where is_preferred is NOT NULL DEFAULT FALSE.   table company( id serial name
varchar )   table businessfield_company( business_field_id FK businessfield
company_id FK company )   I can then add a conditional UNIQUE index to enforce
that a company can only have *one* preferred=true business-field:   create
unique index company_bf_is_pref_idx on businessfield_company(business_field_id,
company_id) where is_preferred;   However, I need it to be DEFERRABLE INITIALLY
DEFERRED, which isn't possible (to my knowledge) with unique indexes.   It is
possible to create deferrable unique constraints, but they cannot be
conditional: alter table businessfield_company add constraint
businessfield_company_is_pref_idx UNIQUE (company_id, is_preferred)where
is_preferred deferrable initially deferred; ERROR:  syntax error at or near
"where" Is this possible using "standard syntax" or do I have to use constraint
triggers?   Thanks.   --
Andreas Joseph Krogh <andreak(at)officenet(dot)no>      mob: +47 909 56 963
Senior Software Developer / CTO - OfficeNet AS - http://www.officenet.no
Public key: http://home.officenet.no/~andreak/public_key.asc

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Marc Mamin 2014-01-22 17:33:28 Re: Deferrable conditional unique constraints
Previous Message Adrian Klaver 2014-01-16 15:18:56 Re: about running plpgsqlo.sql