J'ai donc une Rails 5.0.x application fonctionnant sur Heroku avec Postgres 9.6.1. Je déroule et fais un pg_restore --exit-on-error --verbose --clean --no-acl --no-owner -h localhost -d database_development ~/Documents/Backups/myproduction.dump
J'obtiens l'erreur suivante:
pg_restore: connecting to database for restore
pg_restore: dropping FK CONSTRAINT trial_versions fk_Rails_f888baa05c
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 3091; 2606 16768 FK CONSTRAINT trial_versions fk_Rails_f888baa05c u7dok58iar41mh
pg_restore: [archiver (db)] could not execute query: ERROR: constraint "fk_Rails_f888baa05c" of relation "trial_versions" does not exist
Command was: ALTER TABLE ONLY "public"."trial_versions" DROP CONSTRAINT "fk_Rails_f888baa05c";
Que me dit cette erreur? Je n'ai jamais eu ce problème auparavant. Cela vient de se produire récemment et je dois d'abord comprendre l'erreur avant de pouvoir même commencer à la résoudre.
La base de données d'où provient le fichier de vidage a une certaine contrainte de clé étrangère définie. Mais pas votre base de données cible. Probablement parce que quelqu'un est allé l'ajouter à la base de données sauvegardée depuis la dernière sauvegarde. Puisque vous avez spécifié --clean
, il essaie de supprimer tous les objets qui existent dans le fichier de vidage de votre base de données cible avant de les recréer. Il échoue, car il n'existe pas dans votre base de données cible à supprimer.
Vous pouvez ajouter --if-exists
à la commande de restauration. Ou vous pouvez supprimer --exit-on-error
à partir de la commande, et ignorez simplement le message d'erreur que vous obtenez.