web-dev-qa-db-fra.com

Pourquoi pg_restore retourne-t-il avec succès sans réellement restaurer ma base de données?

J'ai une base de données Postgres 8.4 sur un serveur Linux que j'ai vidée à l'aide de la commande suivante:

pg_dump --format=c --exclude-table=log --file=/path/to/output my_db

Je transfère ensuite le fichier créé sur ma machine Windows 7 locale et tente de restaurer le fichier sur mon instance Postgres 8.4 locale à l'aide de la commande suivante:

pg_restore --create --exit-on-error --verbose c:\path\to\file

La commande de restauration génère de nombreuses sorties affirmant avoir créé ma base de données, s'y connecter, puis créer toutes les autres tables comme prévu. Cependant, lorsque je consulte les bases de données sur ma machine locale via pgAdmin, la base de données restaurée n'existe pas du tout.

Dans une tentative de dépannage, j'ai essayé la commande suivante:

pg_restore --create --exit-on-error --verbose --Host=blahblah --username=no_one c:\path\to\file

Lorsque j'exécute cette commande, même si l'hôte et le nom d'utilisateur fournis sont complètement absurdes, j'obtiens toujours la même sortie exacte de la commande sans aucune erreur.

Quelqu'un a-t-il déjà rencontré cela ou sait-il ce qui pourrait en être la cause?

56
Mike Deck

Vous devez ajouter le nom d'une base de données valide à laquelle vous vous connectez initialement, sinon elle videra simplement le contenu dans STDOUT:

pg_restore --create --exit-on-error --verbose --dbname=postgres <backup_file>
107
Matthew Wood

C'est toujours déroutant, j'ai essayé d'exécuter cette chose que --dbname devrait être le db que je veux créer.

pg_restore --create --exit-on-error --verbose --dbname=jiradb jiradb.tar

FAUX!!

Il devrait être littéralement --dbname postgres, --create créera alors la vraie base de données à partir du nom dans le fichier. Dans mon cas, j'ai restauré à partir d'une sauvegarde tar avec

pg_restore --create --exit-on-error --verbose --dbname=postgres jiradb.tar
3
tgunr