Re: dump/restore with a hidden dependency? - Mailing list pgsql-general

From David G Johnston
Subject Re: dump/restore with a hidden dependency?
Date
Msg-id 1407445932379-5814118.post@n5.nabble.com
Whole thread Raw
In response to Re: dump/restore with a hidden dependency?  (Chris Curvey <ccurvey@zuckergoldberg.com>)
List pgsql-general
Chris Curvey-3 wrote
>> -----Original Message-----
>> From: Tom Lane [mailto:

> tgl@.pa

> ]
>> Sent: Thursday, August 07, 2014 2:50 PM
>> To: Chris Curvey
>> Cc:

> pgsql-general@

>> Subject: Re: [GENERAL] dump/restore with a hidden dependency?
>>
>> Chris Curvey <

> ccurvey@

> > writes:
>> > I have a database with the following structure:
>> > Create table bar...
>> > Create function subset_of_bar ... (which does a select on a subset of
>> > "bar") Create table foo...
>> > Alter table foo add constraint mycheck check subset_of_bar(id);
>>
>> Basically, that's broken in any number of ways, not only the one you
>> tripped
>> across.  CHECK constraint conditions should never, ever, depend on
>> anything except the contents of the specific row being checked.
>> When you try to fake a foreign-key-like constraint with a CHECK, Postgres
>> will check it at inappropriate times (as per your pg_dump problem) and
>> fail
>> to check it at other times when it really needs to be checked (in this
>> case,
>> when you modify table bar).
>>
>> You need to restructure so that you can describe the table relationship
>> as a
>> regular foreign key.  Anything else *will* bite you on the rear.
>>
>>                       regards, tom lane
>
>  Thanks for the heads-up.  Given that my requirement doesn't change
> (entries in foo must not only reference a row in bar, but must reference
> row in a subset of bar), what would be the recommended path forward?  You
> can't reference a view.  Using table inheritance feels like the wrong
> solution.
>
> Perhaps a pair of triggers?  An insert-or-update trigger on foo, and a
> delete-or-update trigger on bar?
>
> Any other ideas?

In no particular order:

Triggers

A Compound FK that applies the check of the of the first field to the subset
defined by the second.
i.e., ... FOREIGN KEY (b_id, b_scope) REFERENCES bar (b_id, b_scope)

David J.







--
View this message in context:
http://postgresql.1045698.n5.nabble.com/dump-restore-with-a-hidden-dependency-tp5814072p5814118.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.


pgsql-general by date:

Previous
From: Adrian Klaver
Date:
Subject: Re: not finding rows using ctid
Next
From: AI Rumman
Date:
Subject: Re: not finding rows using ctid