Hallo, ich habe eine Regel angelegt, welche das Einfügen von Duplikaten (UniqueKey) bei der Datenübernahme verhindern soll - aber es funktioniert nicht. Auf welchem Auge bin ich blind?
Code:
CREATE TABLE bia.taa03
(
pk_aa03 integer NOT NULL DEFAULT 0,
pk_aa03_temp SERIAL,
vorname character varying(50) NOT NULL DEFAULT ''::character varying,
gilt_bis date NOT NULL DEFAULT '9999-12-31'::date,
CONSTRAINT pk_aa03 PRIMARY KEY (pk_aa03_temp),
CONSTRAINT uk_aa03 UNIQUE (vorname)
)
WITH (OIDS=FALSE);
ALTER TABLE bia.taa03 OWNER TO umw_master;
COMMENT ON TABLE bia.taa03 IS 'Katalog Vornamen';
COMMENT ON COLUMN bia.taa03.pk_aa03 IS 'PrimaryKey';
COMMENT ON COLUMN bia.taa03.vorname IS 'Vorname';
COMMENT ON COLUMN bia.taa03.gilt_bis IS 'Gültigkeit des Eintrages';
--
CREATE OR REPLACE RULE insert_ignore AS
ON INSERT TO bia.taa03
WHERE (EXISTS ( SELECT true AS bool
FROM bia.taa03
WHERE taa03.vorname = new.vorname)) DO INSTEAD NOTHING;
-- Übernahme der Daten
INSERT INTO bia.taa03(vorname) SELECT TRIM(vorname) FROM intranet.taa03;
INSERT INTO bia.taa03(vorname) SELECT TRIM(vorname) FROM aa_daten.taa03; Ich habe es auch schon mit COUNT(*) und dann WHERE 0<(SELECT COUNT(*)... probiert, führt zur gleichen Fehlermeldung.
Wird nun die Übernahme mit INSERT INTO... ausgeführt, erscheint die ungewollte ;-) Fehlermeldung - genau die wollte ich verhindern.
Code:
FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint »uk_aa03«
********** Fehler **********
FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint »uk_aa03«
SQL Status:23505
Hat jemand eine Idee?
Gruß und Dank
Rainer
Lesezeichen