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

Reply via email to