Re: Review: Non-inheritable check constraints - Mailing list pgsql-hackers

From Nikhil Sontakke
Subject Re: Review: Non-inheritable check constraints
Date
Msg-id CANgU5Zfu6BKcrvBUhqNyjCA_fFt51L4gDbm6bRysORsghqGn4Q@mail.gmail.com
Whole thread Raw
In response to Re: Review: Non-inheritable check constraints  (Nikhil Sontakke <nikkhils@gmail.com>)
Responses Re: Review: Non-inheritable check constraints  (Alvaro Herrera <alvherre@commandprompt.com>)
List pgsql-hackers

 
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
Attachment

pgsql-hackers by date:

Previous
From: Dimitri Fontaine
Date:
Subject: Extensions and 9.2
Next
From: Tom Lane
Date:
Subject: Re: sync_seqscans in postgresql.conf