Deine Problembeschreibung ist vage, vielleicht habe ich es auch komplett falsch geparst. Mal sehen.
Du hast z.B. 2 Tabellen, hier master und slave genannt:
test=# select * from master;
id | name
----+---------
1 | master1
2 | master2
(2 rows)
test=*# select * from client;
id | name
----+-----------
1 | client1_1
1 | client1_2
2 | client2_1
3 | client3_1
(4 rows)
Der Datensatz mit id=3 in slave ist offensichtlich falsch, er hat keinen Bezug (mehr) in Master.
Du willst nun alle gültigen/ungültigen Datensätze aus slave:
test=*# select * from client where id in (select id from master);
id | name
----+-----------
1 | client1_1
1 | client1_2
2 | client2_1
(3 rows)
test=*# select * from client where id not in (select id from master);
id | name
----+-----------
3 | client3_1
(1 row)
Nach diesem Verfahren könntest Du nun z.B. eine neue Tabelle für slave erzeugen, die gültige Daten enthält:
test=*# create table new_slave as select * from client where id in (select id from master);
SELECT
Und dann dafür sorgen, daß Deine RI in Zukunft erhalten bleibt:
test=# alter table master add primary key (id);
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index "master_pkey" for table "master"
ALTER TABLE
test=*# alter table new_slave add constraint fk foreign key (id) references master(id);
ALTER TABLE
Falls Dir das nichtweiterhilft, würde uns es helfen, wenn Du mehr Details (Aufbau der Tabellen etc.) liefern könntest.



LinkBack URL
About LinkBacks
Zitieren



Lesezeichen