Deferrable conditional unique constraints
Andreas Joseph Krogh <andreak@officenet.no>
From: Andreas Joseph Krogh <andreak@officenet.no>
To: "pgsql-sql@postgresql.org" <pgsql-sql@postgresql.org>
Date: 2014-01-22T01:34:09Z
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@officenet.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