web-dev-qa-db-fra.com

désactiver les contraintes avant d'utiliser pg_restore.exe

Lorsque j'essaie d'exécuter pg_restore.exe d'un fichier de vidage d'une base de données, il génère tout de même des dizaines d'erreurs:

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

Ceci est évidemment dû au fait que j'ai vidé la base de données avant de la restaurer à partir du fichier de vidage (ce fichier provient d'une base de données de production) ... alors bien sûr, aucune contrainte de clés étrangères ne peut être correcte si une table référencée est vide ...

Existe-t-il un moyen de désactiver les contraintes et toutes les clés étrangères, pour toutes les tables, avant d'appeler pg_restore.exe, puis réactivez les contraintes et les clés étrangères.

Dans SO j'ai trouvé quelque chose d'intéressant: différer la vérification des contraintes pour valider le temps . Mais je ne pense pas pouvoir appeler pg_restore.exe de l'Intérieur psql.exe après avoir différé les contraintes.

Il y a aussi ce post , datant d'il y a 10 ans, suggérant de supprimer puis de rajouter les contraintes. Ou changer la valeur des religgers pg_class à 0 et ce serait également possible pour les contraintes ... mais je crains que ce soit plus de piratage que de bonnes pratiques ...

Que conseillez-vous, quelle est la meilleure pratique dans ce cas? Utilise pg_dump.exe avec le -clean flag crée un vidage qui contourne la vérification des contraintes lors de la restauration de la base de données?

16
Stephane Rolland

Avez-vous essayé le --disable-triggers option pour pg_restore?

Selon la documentation: tilisez ceci si vous avez des vérifications d'intégrité référentielle ou d'autres déclencheurs sur les tables que vous ne voulez pas appeler pendant le rechargement des données.

Veuillez noter que cela n'est valable que pour un --data-only restaurer et nécessite le --superuser=username option à passer également.

28
Matthew Wood