web-dev-qa-db-fra.com

pg_restore ERREUR: "La relation n'existe pas" et création d'une nouvelle base de données

J'ai effectué une sauvegarde de mes tables spécifiques que je souhaite restaurer dans une nouvelle base de données en utilisant:

call pg_dump -Fc -h server -d database -U user -p password -v -f dump.sql -t public.table1 -t public.table2

Et je n'ai aucun problème.

Je veux ensuite restaurer le vidage en créant une nouvelle base de données avec pg_restore en utilisant:

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

Cela me donne une erreur "temp de base de données n'existe pas". Cela aurait dû créer la base de données et la restaurer pour autant que je sache.

I Cependant, créez manuellement la base de données "temp" et exécutez:

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

Cela se poursuit, mais ne crée pas les tables et me donne une erreur "relation table1" et "relation table2 "n'existe pas et crée uniquement les id_sewuences correspondantes pour les deux tables.

Ce que je veux réellement, c'est ne pas avoir à créer manuellement la nouvelle base de données et que toutes les tables de la sauvegarde soient restaurées dans une toute nouvelle base de données via pg_restore en utilisant:

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

si je comprends bien.

S'il vous plaît aider, très frustrant

4
Ian23

Quand --create et -d sont utilisés ensemble, l'argument de -d n'est pas pas le nom de la base de données à créer, c'est le nom d'une base de données existante à connecter pour exécuter le CREATE DATABASE, car il est impossible de créer une base de données si vous n'êtes pas déjà connecté à une autre base de données.

C'est documenté comme:

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.

C'est pourquoi pg_restore erreurs avec la base de données n'existe pas

Vous devez ajouter une étape createdb dans votre procédure de restauration car vous souhaitez de toute façon créer un nom de base de données spécifique, pas celui qui provient de la sauvegarde.

Pour le deuxième problème, c'est une question complètement différente, difficile de deviner pourquoi cela se produit sans messages d'erreur complets.

Notez également que -p n'est pas suivi d'un mot de passe mais d'un numéro de port.

4
Daniel Vérité