PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 23/02/2013 23:56:43

RBG
Membre

Doublons et cles etrangeres

Bonjour
En montant une BDD par fusion de plusieurs autres, je me retrouve avec une table doublonnée, référencée dans 4 autres tables. Une ligne doublonnée est référencée par des clés différentes d'une table référençante à l'autre, parfois une ligne de la table référencée est répétée plus de 2, jusqu'à 9 fois. Je veux donc non seulement la dédoublonner, mais surtout m'assurer que les clés étrangères le sont également correctement. ajouter ON UPDATE CASCADE dans la définition de la contrainte de clé étrangère n'a pas marché dans mes essais. (un UPDATE sur la clé primaire dans la tablé référencée ne s'est pas propagé dans la table référençante! Je me retrouvais avec une clé étrangère qui ne renvoyait à aucune ligne de la table référencé!!??)

Comment faire çà proprement? C'est à dire regrouper toutes les lignes dupliquées de ma table référencée dans une seule, MAIS SURTOUT, que les lignes des tables référençantes liées à des lignes supprimées seront mises à jour (=ne deviendront pas orphelines).
merci de votre aide!

Hors ligne

#2 24/02/2013 19:56:36

gleu
Administrateur

Re : Doublons et cles etrangeres

Je ne vois pas comment vous pouvez vous retrouver avec des lignes non référencées. Auriez-vous désactivé les triggers ?


Guillaume.

Hors ligne

#3 03/03/2013 19:35:02

RBG
Membre

Re : Doublons et cles etrangeres

Pas touché au trigger. J'utilise les options par défaut de pgAdminIII et ne sais encore rien de ceux-ci

J'ai dédoublonné ma table initiale en en créant une nouvelle avec un select distinct on et l'ancienne cle. Puis en faisant une jointure sur celle-ci et la table initiale sur les colonnes qui argumentaient le select distinct on, j'ai créé une nouvelle table avec l'ancienne et la nouvelle clé. Même manip avec les tables référenceantes en faisant une jointure sur les anciennes cles pour que les nouvelles tables aient la nouvelle cle. Ca a marché, mais je n'avais pas trop de tables à reprendre...

Hors ligne

Pied de page des forums