Re: Review: Non-inheritable check constraints
Nikhils <nikkhils@gmail.com>
From: Nikhil Sontakke <nikkhils@gmail.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Alvaro Herrera <alvherre@commandprompt.com>, Greg Smith <greg@2ndquadrant.com>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2011-12-20T15:03:33Z
Lists: pgsql-hackers
Attachments
- only_constraint_no_merge.patch (application/octet-stream) patch
> rhaas=# create table A(ff1 int); >> CREATE TABLE >> rhaas=# create table B () inherits (A); >> CREATE TABLE >> rhaas=# create table C () inherits (B); >> CREATE TABLE >> rhaas=# alter table only b add constraint chk check (ff1 > 0); >> ALTER TABLE >> rhaas=# alter table a add constraint chk check (ff1 > 0); >> NOTICE: merging constraint "chk" with inherited definition >> ALTER TABLE >> >> At this point, you'll find that a has a constraint, and b has a >> constraint, but *c does not have a constraint*. That's bad, because >> a's constraint wasn't "only" and should therefore have propagated all >> the way down the tree. >> >> > Apologies, I did not check this particular scenario. > > I guess, here, we should not allow merging of the inherited constraint > into an "only" constraint. Because that breaks the semantics for "only" > constraints. If this sounds ok, I can whip up a patch for the same. > > PFA, patch which does just this. postgres=# alter table a add constraint chk check (ff1 > 0); ERROR: constraint "chk" for relation "b" is an ONLY constraint. Cannot merge Regards, Nikhils