Soy nuevo en postgreSQL. Tengo 3 tablas, una tabla hace referencia a las otras 2 claves principales de la tabla. Pero no pude insertar datos en el Table3
. Vea el código a continuación:
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
);
ERROR: insertar o actualizar en la tabla "Tabla3" viola la restricción de clave externa "Tabla3_DataID_fkey" DETALLE: Clave (DataID) = (27856) no está presente en la tabla "Tabla1".
Cuando intenté insertar datos en las 3 tablas, ocurrió un error. Me he referido la documentación de PostgreSQL y cambiado de código como sigue: (Por desgracia, mostró otro error)
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")
);
ERROR: no se permiten varias claves principales para la tabla "Tabla3" LÍNEA 65: CLAVE PRIMARIA ("ID de datos", "Dirección")
Por favor, ayúdame ... ¿Cómo puedo crear la referencia?
Cambié el ID
as UNIQUE
y eliminé la línea PRIMARY KEY ("ID")
. En ese momento muestra otro error como:
ERROR: el valor de clave duplicada viola la restricción única "Table3_pkey"