postgresql 9 - table inheritance - foreignkeys

Hallo mal wieder,

ich hab da mal eine Frage.

nehmen wir mal an, wir haben eine Base-Table “base” und eine abgeleitete Table “child”. “child” hat einen FK samt Constraint der auf “base” referenziert.

In der “child” Table sind ein paar Datensätze - die wir ja auch in “base” sehen. Nun gibt es ja (oder gab?) es ja die Einschraenkung, dass die referenzierten Tupel (hypotetisch in diesem Beispiel) tatsaechlich auch in “base” eingefuegt sein mussten. Nett waere ja, wenn die Referenz auch auf “geerbte Datensaetze” funktionieren wuerde, Weiss zufaellig irgendwer ob sich da in den neueren versionen pg9 an dieser Limitierung irgendwas getan hat?

Gruß

Ich versteh Dein Problem nicht.

test=# select * from base;
 id | t
----+---
(0 rows)

test=# select * from child ;
 id | t | fk | d
----+---+----+---
(0 rows)

test=# \d base
                         Table "public.base"
 Column |  Type   |                     Modifiers
--------+---------+---------------------------------------------------
 id     | integer | not null default nextval('base_id_seq'::regclass)
 t      | name    |
Indexes:
    "base_pkey" PRIMARY KEY, btree (id)
Referenced by:
    TABLE "child" CONSTRAINT "child_fk_fkey" FOREIGN KEY (fk) REFERENCES base(id)
Number of child tables: 1 (Use \d+ to list them.)

test=# \d child
                         Table "public.child"
 Column |  Type   |                     Modifiers
--------+---------+---------------------------------------------------
 id     | integer | not null default nextval('base_id_seq'::regclass)
 t      | name    |
 fk     | integer |
 d      | text    |
Foreign-key constraints:
    "child_fk_fkey" FOREIGN KEY (fk) REFERENCES base(id)
Inherits: base

test=# insert into child values (1, 'name1');
INSERT 0 1
test=#

Andreas

Hallo,

hierum geht es:

create table [color=darkorchid]base[/color] (
  id serial not null,
  CONSTRAINT pk_base PRIMARY KEY (id)
);

create table [color=black]child[/color] (
  fk int,
  CONSTRAINT pk_child PRIMARY KEY (id),
  CONSTRAINT fk_child_2_base FOREIGN KEY (fk) REFERENCES base(id)
) inherits ([color=darkorchid]base[/color]);

insert into child values (1, null);
insert into child values (2, 1);

ergebnis:

NOTICE:  CREATE TABLE will create implicit sequence "base_id_seq" for serial column "base.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "pk_base" for table "base"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "pk_child" for table "child"
ERROR:  insert or update on table "child" violates foreign key constraint "fk_child_2_base"
DETAIL:  Key (fk)=(1) is not present in table "base".

********** Fehler **********

ERROR: insert or update on table "child" violates foreign key constraint "fk_child_2_base"
SQL Status:23503
Detail:Key (fk)=(1) is not present in table "base".

also mir ist klar, dass das bisher auch nie ging - und soweit ich inzwischen weiss in der version 9 ebenfalls nicht