web-dev-qa-db-fra.com

postgresql d'où vient la sortie de pg_dump

J'essaie de sauvegarder une base de données de postgresql et je veux utiliser la commande pg_dump.
J'ai essayé :

psql -U postgres
postgres-# pg_dump test > backup.sql

Mais je ne sais pas où le fichier de sortie va.
Toute aide serait appréciée

17
Dariush Jafari

Accédez à l'invite de commande et au répertoire postgresql\9.3\bin. 

Exemple

.

..
    c:\Program files\postgresql\9.3\bin> pg_dump -h localhost -p 5432 -U postgres test > D:\backup.sql
...

Après la commande ci-dessus, entrez le mot de passe "postgres" de l'utilisateur et vérifiez le lecteur D:\ pour le fichier backup.sql.

15
Meem

Dans ma situation (PostgreSQL 9.1.21, Centos 6.7), la commande

runuser -l postgres -c 'pg_dump my_database > my_database.sql'

enregistré le fichier ici:

/var/lib/pgsql/my_database.sql

Je ne sais pas si cela est vrai pour les autres versions de Linux, CentOS et/ou pgl. Selon la réponse de l'auteur de cette question , c'est vrai, mais d'autres utilisateurs ont déclaré que le fichier de sauvegarde se trouvait dans le répertoire actuel (une situation différente de la plupart des personnes lisant ce fil pour des raisons évidentes). J'espère que cela pourra aider d'autres utilisateurs avec le même problème.

P.s .: si ce n’est pas le chemin qui convient à votre situation, vous pouvez essayer (sous Linux) de le trouver à l’aide de la commande ci-dessous (comme indiqué par @Bohemian dans les commentaires de cette question), mais cela peut prendre un certain temps:

find / -name 'my_database.sql'

EDIT: J'ai essayé d'exécuter la commande analogue dans Ubuntu 12.04 (cela fonctionne sous Ubuntu 18.04):

Sudo -u postgres pg_dump my_database > my_database.sql

Et dans ce cas, le fichier a été enregistré dans le répertoire actuel dans lequel j'ai exécuté la commande! Donc, les deux cas peuvent se produire sous Linux, en fonction de la dist spécifique sur laquelle vous travaillez

5
Brian Hellekin

Je suis en retard à cette soirée, mais j'estime qu'aucune des réponses n'est vraiment correcte. La plupart semblent impliquer que pg_dump écrit un fichier quelque part. Ce n'est pas. Vous envoyez la sortie dans un fichier et vous a dit au shell où écrire ce fichier.

Dans votre exemple pg_dump test > backup.sql, qui utilise le format plain ou SQL, la commande pg_dumpne stocke aucun fichier, où que ce soit. Il envoie simplement la sortie à STDOUT, qui est généralement votre écran, et c'est fait.

Mais dans votre commande, vous avez également demandé à votre shell (terminal, invite de commande, peu importe) de rediriger STDOUT vers un fichier. Cela n'a rien à voir avec pg_dump mais est une fonctionnalité standard de shells comme Bash ou cmd.exe.

Vous avez utilisé > pour rediriger STDOUT vers un fichier au lieu de l'écran. Et vous avez donné le nom de fichier: "backup.sql". Puisque vous n'avez spécifié aucun chemin, le fichier sera dans votre répertoire actuel. Ceci est probablement votre répertoire personnel, à moins que vous n'ayez fait un cd ... dans un autre répertoire.

Dans le cas particulier de pg_dump, vous auriez également pu utiliser une alternative à la redirection de shell > /path/to/some_file en utilisant l'option -f some_file :

-f fichier
--file = fichier

Envoyer la sortie dans le fichier spécifié. Ce paramètre peut être omis pour les formats de sortie basés sur fichier, auquel cas la sortie standard est utilisée.

Donc, votre commande aurait pu être pg_dump test -f backup.sql, demandant à pg_dump d'écrire directement dans ce fichier.

Mais dans tous les cas, vous donnez le nom du fichier et si vous ne spécifiez pas de chemin, le fichier est créé dans votre répertoire actuel. Si votre invite n'affiche pas déjà votre répertoire actuel, vous pouvez l'afficher avec la commande pwd sous Unix et cd sous Windows.

2
mivk

Si vous ne spécifiez pas de chemins pleinement qualifiés, par exemple: 

pg_dump your_db_name > dbdump

puis dans Windows il stocke les sauvegardes dans le répertoire personnel de l'utilisateur actuel. C'est à dire.: 

C:\Users\username

2
WelcomeTo