Hallo,
ich habe von einer Tabelle mit INHERITS eine Tabelle abgeleitet. Jetzt habe ich aber Probleme mit einer Tabelle, die einen Fremdschlüssel auf die vererbende Tabelle besitzt:
Code:
inheritance=# CREATE TABLE test1(id SERIAL, feld1 TEXT, PRIMARY KEY(id));
HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »test1_id_seq« für die »serial«-Spalte »test1.id«
HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »test1_pkey« für Tabelle »test1«
CREATE TABLE
inheritance=# CREATE TABLE fremd (id SERIAL, test INTEGER REFERENCES test1, feld TEXT, PRIMARY KEY(id));
HINWEIS: CREATE TABLE erstellt implizit eine Sequenz »fremd_id_seq« für die »serial«-Spalte »fremd.id«
HINWEIS: CREATE TABLE / PRIMARY KEY erstellt implizit einen Index »fremd_pkey« für Tabelle »fremd«
CREATE TABLE
inheritance=# CREATE TABLE test2(feld2 INTEGER) INHERITS (test1);
CREATE TABLE
inheritance=# INSERT INTO test1(id, feld1) VALUES (1, 'Hallo');
INSERT 0 1
inheritance=# INSERT INTO test2(id, feld1, feld2) VALUES (2, 'Welt', 42);
INSERT 0 1
inheritance=# SELECT * FROM test1;
id | feld1
----+-------
1 | Hallo
2 | Welt
(2 Zeilen)
inheritance=# SELECT * FROM test2;
id | feld1 | feld2
----+-------+-------
2 | Welt | 42
(1 Zeile)
inheritance=# INSERT INTO fremd(test, feld) VALUES (1, 'nach test1');
INSERT 0 1
inheritance=# INSERT INTO fremd(test, feld) VALUES (2, 'nach test2');
FEHLER: Einfügen oder Aktualisieren in Tabelle »fremd« verletzt Fremdschlüssel-Constraint »fremd_test_fkey«
DETAIL: Schlüssel (test)=(2) ist nicht in Tabelle »test1« vorhanden.
Was mich wundert ist die Meldung, der Schlüssel (test)=(2) sei nicht in der Tabelle "test1" vorhanden.
Der Select auf Tabelle "test1" zeigt jedoch, dass der Schlüssel sehr wohl in der Tabelle vorhanden ist.
Wieso gibt es dennoch eine Verletzung des Constraints?
Lesezeichen