Problem mit Foreign Keys (und vererbten Tabellen?)

Lists: pgsql-de-allgemein
From: Robert Müller <muellerrobert(at)gmail(dot)com>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Problem mit Foreign Keys (und vererbten Tabellen?)
Date: 2006-03-07 12:59:58
Message-ID: 9794185d0603070459i4723c17et@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Hallo!
Ich habe ein Problem mit den Foreign Keys in folgender Tabellenkonstellation:

SET SEARCH_PATH TO test;

-- Struktur
CREATE SEQUENCE object_obj_id_seq;

CREATE TABLE object
(
obj_id int4 NOT NULL DEFAULT nextval('object_obj_id_seq'::text),
CONSTRAINT object_pkey
PRIMARY KEY (obj_id)
);

CREATE TABLE obj_obj_rel
(
parent_id int4 NOT NULL,
child_id int4 NOT NULL,
CONSTRAINT obj_obj_rel_pkey
PRIMARY KEY (parent_id, child_id),
CONSTRAINT fk_child_id_exists_in_object
FOREIGN KEY (child_id) REFERENCES object (obj_id)
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk_parent_id_exists_in_object
FOREIGN KEY (parent_id) REFERENCES object (obj_id)
ON UPDATE CASCADE ON DELETE CASCADE
);

CREATE TABLE person
(
last_name varchar(40) NOT NULL DEFAULT ''
) INHERITS (object);

CREATE TABLE contactperson
(
position varchar(40) NOT NULL DEFAULT ''
) INHERITS (object);

-- Daten
INSERT INTO person(last_name) values('Müller');
INSERT INTO contactperson(position) values('Sklave');

Wenn ich jetzt ein

insert into obj_obj_rel(parent_id, child_id) values (2,1);

machen will bekomme ich folgenden Fehler:

FEHLER: Einfügen oder Aktualisieren in Tabelle »obj_obj_rel« verletzt
Fremdschlüssel-Constraint »fk_child_id_exists_in_object«
DETAIL: Schlüssel (child_id)=(1) ist nicht in Tabelle »object« vorhanden.

Für mich ist doch aber der Schlüssel 1 sehr wohl in object vorhanden:
select * from object where obj_id = 1;
ergibt die gesuchte zeile;

Was also habe ich falsch gemacht bzw wo ist mein Denkfehler?

Mit freundlichen Gruessen
Robert


From: Robert Müller <muellerrobert(at)gmail(dot)com>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Problem mit Foreign Keys (und vererbten Tabellen?)
Date: 2006-03-07 18:07:41
Message-ID: 9794185d0603071007g704dc584o@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-de-allgemein

Ich habe jetzt die Ursache des Problemes zumindestens erst mal isolieren können:

Da die Datensätze in die vererbten Tabellen eingefügt wurden und nicht
in die vererbende Tabelle object, funktioniert der Foreignkey
Constraint nicht. :(

Er funktioniert nur bei Direkt in object eingefügte Werte. Ich werde
also stattdessen mit einem Trigger arbeiten müssen.