Foreign Key Fehlermeldung

So, nach meinem problem mit dem PK, schleppe ich mich nun bei den FKs von Fehlermeldung zu Fehlermeldung…
Diese hier verstehe ich schon, jedoch will ich den FK genau darauf setzen…
Muss ich dazu die elemente aus der DB löschen, welche in der einen Table nicht ‘present’ sind, oder bei der anderen Tabelle hinzufügen? oder kann ich den FK irgendwie ‘erzwingen’ - das wäre mir sehr recht :slight_smile:
ok dann,
dankeschön für euer wissen!

Ja, ja.

oder kann ich den FK irgendwie ‘erzwingen’ - das wäre mir sehr recht > :slight_smile:
ok dann,
dankeschön für euer wissen!

Du kannst das erzwingen - indem Du die Bedingungen des FK-Constraints erfüllst. PG ist sehr strikt, und das ist auch gut so. Also, wenn Du eine FK-Beziehung setzen willst, mußt Du dafür sorgen, das die Bedingungen dafür erfüllt sind. Wowereit.

Andreas

Dankeschön,
also löschen oder hinzufügen…
das wird was… naja
würdest du löschen oder hinzufügen vorschlagen?
ich würde zu löschen tendieren, da der FK nur FK für einen PK ist, da können keine ‘wertvollen’ informationen verloren gehen??

Was fragst Du mich das, sind das meine oder Deine Daten?

Andreas

g

So wichtig können die Daten nicht sein, wenn über ein Löschen nachgedacht wird.

Falls doch:

Ausgangstabellen:

test=# select * from master;
 id |  name
----+---------
  1 | master1
  2 | master2
  3 | master3
(3 rows)

test=*# select * from slave;
 fk |  name
----+--------
  2 | slave2
  4 | slave4
  6 | slave6
(3 rows)

Versuch, ein FK-Constraint zu bauen:

test=*# alter table slave add constraint fk_key foreign key (fk) references master(id);
ERROR:  insert or update on table "slave" violates foreign key constraint "fk_key"
DETAIL:  Key (fk)=(4) is not present in table "master".
test=!# rollback;
ROLLBACK

Okay, das geht also nicht. Also erzeuge ich erst einmal Dummy-Datensätze, damit ich dann mit dem FK-Constraint arbeiten kann:

test=# insert into master (id, name) select fk, fk::text || 'dummy' from slave left join master on (fk=id) where id is null;
INSERT 0 2
test=*# alter table slave add constraint fk_key foreign key (fk) references master(id);
ALTER TABLE
test=*# select * from master;
 id |  name
----+---------
  1 | master1
  2 | master2
  3 | master3
  4 | 4dummy
  6 | 6dummy
(5 rows)

Und nun Kaffee.


Andreas

danke für die anregungen!
ich hab es nun mit beidem - löschen und dem interessanten hinzufügen - probiert, beides ohne erfolg… die daten sind einfach zu sehr ineinander verknüpft (hier hinzufügen, dort fehlermeldung, hier löschen dort fehlermeldung). bz wären es wenn ich sie verknüpfen KÖNNTE!!! aaaahhhh
egal, jetzt wird die datenbank verworfen und alles direkt programmiert…
oder einfach die datenbank ohne keys als datengrundlage…
mal sehen…
peter