Lorsque j'essaie d'exécuter pg_restore.exe
un fichier de vidage à partir d'une base de données, cela génère des dizaines d'erreurs, tout de même:
ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"
Cela 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 de réactiver les contraintes et les clés étrangères.
Dans SO, j'ai trouvé quelque chose d'intéressant: reporter 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 de 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? L'utilisation pg_dump.exe
avec l' -clean
indicateur crée-t-elle un vidage qui contourne la vérification des contraintes lors de la restauration de la base de données?
la source
Réponses:
Avez-vous essayé le
--disable-triggers
optionpg_restore
?Selon la documentation: utilisez ceci si vous avez des vérifications d'intégrité référentielle ou d'autres déclencheurs sur les tables que vous ne souhaitez pas appeler pendant le rechargement des données.
Veuillez noter que cela n'est valable que pour une
--data-only
restauration et nécessite également le passage de l'--superuser=username
option.la source