Thread: BUG #7583: Problem using INHERITS and LIKE

BUG #7583: Problem using INHERITS and LIKE

From
bryan.love@iovation.com
Date:
The following bug has been logged on the website:

Bug reference:      7583
Logged by:          Bryan Love
Email address:      bryan.love@iovation.com
PostgreSQL version: 9.2.1
Operating system:   Centos 6
Description:        =


After creating a table using LIKE and INHERITS, if you drop a column from
the parent table that existed prior to creation of the child table, the
column will not be dropped from the child table.

Test Case:

=3D# create table foo(col1 int, col2 int);
=3D# create table bar (like foo) inherits (foo);
NOTICE:  merging column "col1" with inherited definition
NOTICE:  merging column "col2" with inherited definition
CREATE TABLE
=3D# alter table foo drop col1;
ALTER TABLE
=3D# \d bar
      Table "public.bar"
 Column |  Type   | Modifiers
--------+---------+-----------
 col1   | integer |
 col2   | integer |
Inherits: foo

--- copy/paste block commands ----
drop table bar;
drop table foo;
create table foo(col1 int, col2 int);
create table bar (like foo) inherits (foo);
alter table foo drop col1;
\d bar

Re: BUG #7583: Problem using INHERITS and LIKE

From
Tom Lane
Date:
bryan.love@iovation.com writes:
> After creating a table using LIKE and INHERITS, if you drop a column from
> the parent table that existed prior to creation of the child table, the
> column will not be dropped from the child table.

This is not a bug.  LIKE says the column isn't inherited, so it exists
in the child independently of whether it exists in the parent.

Or, if you want to add it up: the child starts out with one local
definition of the column (from LIKE) and one inherited (from INHERITS).
Dropping the column from the parent removes the latter, but you still
have the former, so the column stays.

> =# create table bar (like foo) inherits (foo);

Just out of curiosity, is there any actual use-case for such a silly
thing?

            regards, tom lane

Re: BUG #7583: Problem using INHERITS and LIKE

From
Bryan Love
Date:
Understood, thanks.

Our use case is that we want to copy the indexes from the parent table as
well, so we have to use (like ... including indexes).

On Thu, Oct 4, 2012 at 7:38 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

> bryan.love@iovation.com writes:
> > After creating a table using LIKE and INHERITS, if you drop a column from
> > the parent table that existed prior to creation of the child table, the
> > column will not be dropped from the child table.
>
> This is not a bug.  LIKE says the column isn't inherited, so it exists
> in the child independently of whether it exists in the parent.
>
> Or, if you want to add it up: the child starts out with one local
> definition of the column (from LIKE) and one inherited (from INHERITS).
> Dropping the column from the parent removes the latter, but you still
> have the former, so the column stays.
>
> > =# create table bar (like foo) inherits (foo);
>
> Just out of curiosity, is there any actual use-case for such a silly
> thing?
>
>                         regards, tom lane
>