web-dev-qa-db-fra.com

Comment passer le mot de passe à pg_dump?

J'essaie de créer une tâche cron pour sauvegarder ma base de données toutes les nuits avant qu'une catastrophe ne se produise. Il semble que cette commande devrait répondre à mes besoins:

0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz

Sauf après avoir exécuté cela, il s'attend à ce que je tape un mot de passe. Je ne peux pas faire ça si je le lance à partir de cron. Comment puis-je en passer un automatiquement?

215
mpen

Créez un fichier .pgpass dans le répertoire de base du compte sous lequel pg_dump sera exécuté. Voir la documentation Postgresql libpq-pgpass pour plus de détails sur le format (y compris le dernier paragraphe où il est expliqué qu'il sera ignoré si vous ne définissez pas le mode sur 0600).

229
araqnid

Ou vous pouvez configurer crontab pour exécuter un script. Dans ce script, vous pouvez définir une variable d’environnement comme celle-ci: export PGPASSWORD="$put_here_the_password"

De cette façon, si vous avez plusieurs commandes nécessitant un mot de passe, vous pouvez toutes les insérer dans le script. Si le mot de passe change, il vous suffit de le changer à un endroit (le script).

Et je suis d'accord avec Joshua, l'utilisation de pg_dump -Fc génère le format d'exportation le plus flexible et est déjà compressé. Pour plus d'informations, voir: documentation pg_dump

Par exemple. 

# dump the database in custom-format archive
pg_dump -Fc mydb > db.dump

# restore the database
pg_restore -d newdb db.dump
170
Max

Si vous voulez le faire en une seule commande:

PGPASSWORD="mypass" pg_dump mydb > mydb.dump
135
gitaarik
$ PGPASSWORD="mypass" pg_dump -i -h localhost -p 5432 -U username -F c -b -v -f dumpfilename.dump databasename
41
Francisco Luz

@Josue Alexander Ibarra answer fonctionne sur centos 7 et version 9.5 Si --dbname n'est pas passé 

pg_dump postgresql://username:[email protected]:5432/mydatabase 
13
Jauyzed

Corrigez-moi si je me trompe, mais si l'utilisateur du système est identique à l'utilisateur de la base de données, PostgreSQL ™ ne demandera pas le mot de passe - il s'appuie sur le système pour l'authentification. Cela pourrait être une question de configuration.

Ainsi, lorsque je souhaitais que le propriétaire de la base de données postgres sauvegarde ses bases de données toutes les nuits, je pouvais créer une crontab pour celle-ci: crontab -e -u postgres. Bien entendu, postgres devrait être autorisé à exécuter des tâches cron; il doit donc être répertorié dans /etc/cron.allow, ou /etc/cron.deny doit être vide.

4
Tobias

Comme détaillé dans cet article de blog , il existe deux méthodes pour fournir de manière non interactive un mot de passe aux utilitaires PostgreSQL tels que la commande "pg_dump": en utilisant le fichier ".pgpass" ou en utilisant le "PGPASSWORD " variable d'environnement.

2
manfall19

Notez que dans Windows, le fichier pgpass.conf doit se trouver dans le dossier suivant:

%APPDATA%\postgresql\pgpass.conf

s'il n'y a pas de dossier postgresql dans le dossier %APPDATA%, créez-le.

le contenu du fichier pgpass.conf ressemble à quelque chose comme:

localhost:5432:dbname:dbusername:dbpassword

à votre santé

0

Ce support m'aide à créer une sauvegarde d'une base de données unique.

PGPASSWORD="yourpassword" pg_dump -U postgres -h localhost mydb > mydb.pgsql
0
Rajan Verma