Re: Review: Non-inheritable check constraints

From: Nikhil Sontakke <nikkhils(at)gmail(dot)com>
To: Robert Haas <robertmhaas(at)gmail(dot)com>
Cc: Alvaro Herrera <alvherre(at)commandprompt(dot)com>, Greg Smith <greg(at)2ndquadrant(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Review: Non-inheritable check constraints
Date: 2011-12-23 03:30:31
Message-ID: CANgU5ZdUXj-spMBkrjmebpV2r4PS+LaGW5=acvUn--4EBfBM5g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

And yeah, certainly there's a bug as you point out.

postgres=# create table a1 (ff1 int, constraint chk check (ff1 > 0));
postgres=# create table b1 (ff1 int);
postgres=# alter table only b1 add constraint chk check (ff1 > 0);
postgres=# alter table b1 inherit a1;

The last command should have refused to inherit.

Regards,
Nikhils

On Fri, Dec 23, 2011 at 8:55 AM, Nikhil Sontakke <nikkhils(at)gmail(dot)com> wrote:

> Hi,
>
>
>> There is at least one other
>> problem. Consider:
>>
>> rhaas=# create table a (ff1 int, constraint chk check (ff1 > 0));
>> CREATE TABLE
>> rhaas=# create table b (ff1 int, constraint chk check (ff1 > 0));
>> CREATE TABLE
>> rhaas=# alter table b inherit a;
>> ALTER TABLE
>>
>> This needs to fail if chk is an "only" constraint, but it doesn't,
>> even with this patch.
>>
>>
> As you rightly point out, this is because we cannot specify ONLY
> constraints inside a CREATE TABLE as of now.
>
>
>> I think that part of the problem here is fuzzy thinking about the
>> meaning of the word "ONLY" in "ALTER TABLE ONLY b". The word "ONLY"
>> there is really supposed to mean that the operation is performed on b
>> but not on its descendents; but that's not what you're doing: you're
>> really performing a different operation. In theory, for a table with
>> no current descendents, ALTER TABLE ONLY b and ALTER TABLE b ought to
>> be identical, but here they are not. I think that's probably bad.
>>
>>
> ONLY has inheritance based connotations for present/future children. ALTER
> ONLY combined with ADD is honored better now with this patch IMO (atleast
> for constraints I think).
>
>
>> Another manifestation of this problem is that there's no way to add an
>> ONLY constraint in a CREATE TABLE command. I think that's bad, too:
>> it should be possible to declare any constraint at table creation
>> time, and if the ONLY were part of the constraint definition rather
>> than part of the target-table specification, that would work fine. As
>> it is, it doesn't.
>>
>>
> Well, the above was thought about during the original discussion and
> eventually we felt that CREATE TABLE already has other issues as well, so
> not having this done as part of creating a table was considered acceptable:
>
>
> http://postgresql.1045698.n5.nabble.com/Check-constraints-on-partition-parents-only-tt4633334.html#a4647144
>
>
>> I am tempted to say we should revert this and rethink. I don't
>> believe we are only a small patch away from finding all the bugs here.
>>
>>
> Sure, if we all think that CREATE TABLE should support ONLY CONSTRAINT
> type of syntax, then +1 for reverting this and a subsequent revised
> submission.
>
> Regards,
> Nikhils
>

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Alvaro Herrera 2011-12-23 03:54:22 Re: Review: Non-inheritable check constraints
Previous Message Nikhil Sontakke 2011-12-23 03:25:26 Re: Review: Non-inheritable check constraints