Foreign Keys deduplizieren

Foreign Keys deduplizieren

am 26.08.2010 14:21:15 von e.t.bussmann

Hallo list,

ich habe ein kleines Problem, wo ich gerne von eurer Erfahrung profitiere=
n
würde:

Angenommen ich habe eine Tabelle kunden (kunden_id SERIAL PRIMARY KEY,
kunden_name VARCHAR). Dazu habe ich eine Vielzahl von anderen Tabellen wi=
e
z.B. rechnungen (rechnungs_id SERIAL PRIMARY KEY, kunden_id INTEGER,
rechnungs_nummer VARCHAR), die auf kunden.kunden_id als Forein Key
referenzieren. Diese Foreign Keys sind alle als ON UPDATE CASCADE und ON
DELETE CASCADE konfiguriert.

Nun habe ich das Problem, dass ich in der kunden Tabelle (sematische)
Duplikate habe, die ich gerne aufräumen / dedupliziern möchte. Ich ha=
be also
zwei kunden_ids, die ich zu einer mergen möchte, dazu müssen natürl=
ich auch
alle Verweise auf diesen Kunden angepasst werden. Wie gehe ich das am bes=
ten
an? Löschen kann ich den einen nicht, da er dann die auf ihn verweisend=
en
Records in den anderen Tabellen mitlöscht. Updaten auf die ID des ander=
en
kann ich auch nicht, da ich dann natürlich ein duplicate key in kunden
bekomme.

Mein Ansatz sieht derzeit vor, mir eine PL/pgSQL Funktion zum mergen zu
schreiben, die sich über das information_schema alle Tabellen, die auf
kunden.kunden_id referenzieren raussucht, dort entsprechende UPDATEs auf =
die
eine ID vornimmt und dann die andere ID aus kunden löscht.
Eine andere Idee könnte sein, irgendwas mit DEFERABLE Foreign Keys inne=
rhalb
einer Transaktion zu machen aber ich weiss nicht genau wie.

Gibt es hierfür ein 'best practice'?

Danke schon mal
Tobias


--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein