Ich bin neu in postgreSQL. Ich habe 3 Tabellen, eine Tabelle verweist auf die Primärschlüssel der anderen 2 Tabelle. Aber ich konnte keine Daten in die einfügen Table3
. Siehe den folgenden Code:
DROP TABLE Table1 CASCADE;
CREATE TABLE Table1(
"DataID" bigint NOT NULL DEFAULT '0',
"AdData" integer DEFAULT NULL,
PRIMARY KEY ("DataID")
);
DROP TABLE IF EXISTS Table2 CASCADE;
CREATE TABLE Table2 (
"Address" numeric(20) NOT NULL DEFAULT '0',
"Value" numeric(20) DEFAULT NULL,
PRIMARY KEY ("Address")
);
DROP TABLE IF EXISTS Table3 CASCADE;
CREATE TABLE table3 (
"ID" bigint NOT NULL DEFAULT '0',
"DataID" bigint DEFAULT NULL,
"Address" numeric(20) DEFAULT NULL,
"Data" bigint DEFAULT NULL,
PRIMARY KEY ("ID"),
FOREIGN KEY ("DataID") REFERENCES Table1("DataID") on delete cascade on update cascade,
FOREIGN KEY ("Address") REFERENCES Table2("Address") on delete cascade on update cascade
);
FEHLER: Einfügen oder Aktualisieren in Tabelle "Tabelle3" verstößt gegen die Fremdschlüsseleinschränkung "Table3_DataID_fkey". DETAIL: Schlüssel (DataID) = (27856) ist in Tabelle "Tabelle1" nicht vorhanden.
Beim Versuch, Daten in die 3 Tabellen einzufügen, ist ein Fehler aufgetreten. Ich habe auf die postgreSQL-Dokumentation verwiesen und meinen Code wie folgt geändert: (Leider wurde ein weiterer Fehler angezeigt. )
DROP TABLE Table1 CASCADE;
CREATE TABLE Table1(
"DataID" bigint NOT NULL DEFAULT '0',
"AdData" integer DEFAULT NULL,
PRIMARY KEY ("DataID")
);
DROP TABLE IF EXISTS Table2 CASCADE;
CREATE TABLE Table2 (
"Address" numeric(20) NOT NULL DEFAULT '0',
"Value" numeric(20) DEFAULT NULL,
PRIMARY KEY ("Address")
);
DROP TABLE IF EXISTS Table3 CASCADE;
CREATE TABLE table3 (
"ID" bigint NOT NULL DEFAULT '0',
"DataID" bigint DEFAULT NULL REFERENCES Table1 ON DELETE RESTRICT,
"Address" numeric(20) DEFAULT NULL REFERENCES Table2 ON DELETE CASCADE,
"Data" bigint DEFAULT NULL,
PRIMARY KEY ("ID"),
PRIMARY KEY("DataID", "Address")
);
FEHLER: Mehrere Primärschlüssel für Tabelle "Tabelle3" sind nicht zulässig. LINE 65: PRIMARY KEY ("DataID", "Address")
Bitte helfen Sie mir ... Wie kann ich die Referenz erstellen?
Ich habe das ID
as geändert UNIQUE
und die Zeile entfernt PRIMARY KEY ("ID")
. Zu diesem Zeitpunkt zeigt es einen weiteren Fehler wie:
FEHLER: Doppelter Schlüsselwert verletzt eindeutige Einschränkung "Table3_pkey"
quelle
Es hängt alles davon ab, was Sie mit den Daten machen möchten.
Erstes Beispiel: Sie möchten konsistente Daten in allen Tabellen haben, versuchen jedoch, Werte einzufügen, die nicht mit Tabelle1 übereinstimmen.
Zweites Beispiel: Sie möchten keine konsistenten Daten haben, aber versuchen, etwas anderes zu tun, ohne genau zu wissen, was. Tabelle kann nicht mehr als einen Primärschlüssel haben.
Drittes Beispiel: Sie wissen immer noch nicht, was Sie erreichen möchten, und setzen eine EINZIGARTIGE Einschränkung auf eine Spalte, die möglicherweise mehrmals denselben Wert hat.
Wenn Sie nur Ihre Daten einfügen möchten, entfernen Sie im ersten Beispiel Fremdschlüsselreferenzen. Wenn Sie konsistente Daten in allen Tabellen haben möchten, führen Sie die Datenbereinigung durch und fügen Sie sie dann in Tabellen mit Fremdschlüsseleinschränkungen ein.
tl; dr: Um Ihre Daten mit Code aus dem ersten Beispiel in Tabelle 3 einzufügen, fügen Sie fehlende Werte in die Spalte Table1.DataID ein, die in Table3.DataId vorhanden ist.
quelle