J'utilise pg_dump et pg_restore pour la sauvegarde et la restauration de la base de données postgres.
Voici quelques informations de la documentation qui seront pertinentes pour cette question Pour Pg_restore, l'option -C est décrite comme suit
-C
--créer
Créez la base de données avant de la restaurer. Si --clean est également spécifié,>> supprimez et recréez la base de données cible avant de vous y connecter. Lorsque cette option est utilisée, la base de données nommée avec -d est utilisée uniquement pour émettre les commandes DROP DATABASE et CREATE DATABASE initiales. Toutes les données sont restaurées dans le nom de la base de données qui apparaît dans l'archive.
Cependant, même lorsque j'utilise cette option avec pg_restore, j'obtiens l'erreur suivante
pg_restore: [archiveur (db)] connexion à la base de données "test" a échoué: FATAL:> la base de données "test" n'existe pas
Selon la description, l'option -C aurait dû créer la base de données manquante. Mais ce n'est pas le cas dans mon cas.
Voici les étapes que j'ai effectuées pour la sauvegarde et la restauration:
pg_dump -N backup -d test --format custom -v -h xxhostxx -p 5432 -U xxuserxx --lock-wait-timeout 300000 -f test_pg_dump.dmp
Remarque: ne pas utiliser l'option -C car elle n'a de sens que pour les formats de texte brut
Suppression de la base de données test
utiliser pg_resore pour restaurer la base de données
pg_restore -C -d test -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
Je ne peux pas comprendre quel est le problème ici! Suis-je en train de faire quelque chose de mal? Faites-moi savoir si plus d'informations sont nécessaires.
Exactement comme @Eelke l'a dit - vous avez dans le fichier écrit "créer une base de données", donc cette base de données n'existe pas lorsque vous exécutez un script ... C'est pour cela qu'il y a toujours une base de données "postgres". Essaye ça:
pg_restore -C -d postgres -v -h xxhostxx -p 5432 -U xxuserxx test_pg_dump.dmp**
Et cela devrait:
Bien sûr, vérifiez qui est le propriétaire de la base de données postgres - dans la plupart des cas, vous devez l'exécuter en tant qu'utilisateur "postgres".
La citation suivante ne signifie pas ce que vous pourriez penser que cela signifie. J'ai aussi dû le lire trois fois avant de réaliser ce qu'ils disaient.
Lorsque cette option est utilisée, la base de données nommée avec -d est utilisée uniquement pour émettre les commandes DROP DATABASE et CREATE DATABASE initiales. Toutes les données sont restaurées dans le nom de la base de données qui apparaît dans l'archive.
Cela signifie que pg_restore se connectera initialement à la base de données spécifiée avec -d. Il ne créera PAS cette base de données. Il crée une base de données avec le nom de l'archive que vous restaurez et restaure les données dans cette base de données.
Cela n'a jamais fonctionné pour moi, donc cette commande crée la base de données
createdb -h Host -U USER -W DB_NAME
puis exécutez la restauration pg
pg_restore -d DB_NAME -v -h Host -p PORT -U USER DUMP_FILE.dump**
Fin de l'histoire