Magazine Entreprendre

Postgresql : Remplacer les ‘ON DELETE NO ACTION’ par ‘ON DELETE CASCADE’

Publié le 02 décembre 2013 par Pjgrizel

Quand on crée des clés étrangères sous PG, par défaut, les contraintes sont de type « ON DELETE NO ACTION ».

Il n’existe pas de moyen simple de remplacer par un ‘ON DELETE CASCADE’, à part effacer la relation puis la recréer. Comment faire alors pour appliquer cette modification sur toute une base sans (trop) se compliquer la vie ?

Une autre astuce (mais qui nécessite de rendre la DB indisponible le temps de la manipulation) consiste à faire un export de la base avec pg_dump puis la réimporter avec un ‘sed’ bien senti. Voici comment nous faisons :

psql -c "CREATE DATABASE db_cible ..."
pg_dump -h 10.1.1.61 db_source | sed 's/FOREIGN KEY (\(.*\)) REFERENCES \(.*)\);/FOREIGN KEY (\1) REFERENCES \2 ON DELETE CASCADE;/' | psql db_cible

That’s it. La base db_cible contient les mêmes données que db_source mais avec les ‘ON DELETE CASCADE’ qui vont bien.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Pjgrizel 160 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte