BUG #13779: Inherited check constraint becomes non-inherited when related column is changed

From: jan(dot)dirk(dot)zijlstra(at)redwood(dot)com
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #13779: Inherited check constraint becomes non-inherited when related column is changed
Date: 2015-11-19 09:41:26
Message-ID: 20151119094126.2574.12966@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

The following bug has been logged on the website:

Bug reference: 13779
Logged by: Jan Dirk Zijlstra
Email address: jan(dot)dirk(dot)zijlstra(at)redwood(dot)com
PostgreSQL version: 9.4.5
Operating system: Linux
Description:

create table parenttable (a numeric, b numeric);
create table childtable () inherits (parenttable);
alter table parenttable add constraint parentconstraint_a check (a > 0);
alter table parenttable add constraint parentconstraint_b check (b > 0);
\d+ parenttable
\d+ childtable
select t.relname, c.conname, c.coninhcount, c.conislocal, c.connoinherit
from pg_constraint c, pg_class t where c.conname like 'parentconstraint%'
and c.conrelid = t.oid;
alter table parenttable alter column a set data type real ;
\d+ parenttable
\d+ childtable
select t.relname, c.conname, c.coninhcount, c.conislocal, c.connoinherit
from pg_constraint c, pg_class t where c.conname like 'parentconstraint%'
and c.conrelid = t.oid;
drop table childtable;
drop table parenttable;

When executing the commands above, you'll notice that you have in the end a
child table with a constraint which is not inherited anymore.
This gives issues, because
- you cannot drop the constraint on the parent table anymore.
( psql:tp.sql:86: ERROR: relation 23724254 has non-inherited constraint
"parentconstraint_a" )
- you can drop the constraint on the child table, but than you can again not
drop the constraint on the parent anymore.
(psql:tp.sql:90: ERROR: constraint "parentconstraint_a" of relation
"childtable" does not exist)
- you cannot uninherit the child
(psql:tp.sql:103: ERROR: relation 23724399 has non-inherited constraint
"parentconstraint_a")

To come out of this situation, I need to
- drop the local constraint on the child table
- drop the inheritance from the child table
- drop the local constraint on the parent table
- restore the inheritance on the child table
- create the constraint again on the parent table.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Kouadio denis KOFFI 2015-11-19 16:27:19 Fwd: request
Previous Message Sandeep Thakkar 2015-11-19 07:01:46 Re: BUG #13692: Error when run silent installation whith alredy installed PG9.4

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Langote 2015-11-19 10:04:30 Typo in file header comment of replorigindesc.c
Previous Message Michael Paquier 2015-11-19 09:13:29 Re: Selective logical replication