Hi, On Mon, Jan 4, 2016 at 8:11 PM, amul sul <sul_a...@yahoo.co.in> wrote: > Hi, > > In inheritance, child column's pg_attribute.attislocal flag not getting > updated, if it is inherited using ALTER TABLE <child> INHERIT <parent>. > > Due to this, if we try to drop column(s) from parent table, which are not > getting drop from child. > Attached herewith is quick patch fixing this issue. > > > ----------------------Demonstration: > ---------------------- > CREATE TABLE p1 (a int , b int, c int, d int); > > CREATE TABLE c1 () inherits (p1);CREATE TABLE c2 (a int , b int, c int, d > int); > > > --Drop parent's column > ALTER TABLE p1 DROP COLUMN b; > ALTER TABLE p1 DROP COLUMN c; > ALTER TABLE p1 DROP COLUMN d; > > > postgres=# \d p1 > Table "public.p1" > Column | Type | Modifiers > --------+---------+----------- > a | integer | > Number of child tables: 2 (Use \d+ to list them.) > > postgres=# \d c1 > Table "public.c1" > Column | Type | Modifiers > --------+---------+----------- > a | integer | > Inherits: p1 > > postgres=# \d c2 > Table "public.c2" > Column | Type | Modifiers > --------+---------+----------- > a | integer | > b | integer | > c | integer | > d | integer | > Inherits: p1 > > > ---------------------- > You can see columns are not dropped from child c2 table, which we have > inherited using ALTER command.
I'm afraid the patched behavior of MergeAttributeIntoExisting() would be inconsistent with MergeAttributes(). For example, try with the following: CREATE TABLE c1(b int) INHERITS(p1); In this case, MergeAttributes() would cause 'b' to be defined to be a local attribute (ie, with attislocal = true) and hence would not be dropped unlike c2 which the patched behavior would cause to be dropped. Am I missing something? Thanks, Amit -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers