Thread: Multiple Inheritance

Multiple Inheritance

From
tankgirl@worldonline.es
Date:
  Hi everyone,

  I have found out that Postgres provides inheritance between tables.

  I wonder if 'multiple inheritance' can be implemented. I mean if
a child table may have more than one parent table.
  And if this is possible what sql syntax does it follow.

  Thankyou in advance.

                                Stay Safe & Happy

                                       :* TankGirl



Re: Multiple Inheritance

From
"Oliver Elphick"
Date:
tankgirl@worldonline.es wrote:
  >  Hi everyone,
  >
  >  I have found out that Postgres provides inheritance between tables.
  >
  >  I wonder if 'multiple inheritance' can be implemented. I mean if
  >a child table may have more than one parent table.
  >  And if this is possible what sql syntax does it follow.

It's in the man page for create_table:

       CREATE [ TEMPORARY | TEMP ] TABLE table_name (
           { column_name type [ column_constraint [ ... ] ]
             | table_constraint }  [, ... ]
           ) [ INHERITS ( inherited_table [, ... ] ) ]
...
       inherited_table
              The optional INHERITS clause specifies  a  list  of
              table  names  from  which  this table automatically
              inherits all fields.  If any inherited  field  name
              appears  more than once, Postgres reports an error.
              Postgres automatically allows the created table  to
              inherit functions on tables above it in the inheri­
              tance hierarchy.


--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver
PGP: 1024R/32B8FAA1: 97 EA 1D 47 72 3F 28 47  6B 7E 39 CC 56 E4 C1 47
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "Rejoice with them that do rejoice, and weep with them
      that weep."            Romans 12:15



Re: Multiple Inheritance

From
Tom Lane
Date:
"Oliver Elphick" <olly@lfix.co.uk> writes:
> It's in the man page for create_table:

>        inherited_table
>               The optional INHERITS clause specifies  a  list  of
>               table  names  from  which  this table automatically
>               inherits all fields.  If any inherited  field  name
>               appears  more than once, Postgres reports an error.

Hmm, this bit of the documentation is wrong:

regression=# create table p1 (f1 int, f2 float);
CREATE
regression=# create table p2 (f1 int, f2 float, f3 int);
CREATE
regression=# create table c1(f4 int) inherits (p1,p2);
NOTICE:  CREATE TABLE: merging multiple inherited definitions of attribute "f1"
NOTICE:  CREATE TABLE: merging multiple inherited definitions of attribute "f2"
CREATE
regression=#

The NOTICE is new in 7.1, but prior versions did this sort of merging
as well.  Will fix the docs.

            regards, tom lane