589 votes

Comment spécifier un mot de passe pour psql de manière non interactive?

J'essaie d'automatiser le processus de création de base de données avec un script shell. J'ai bloqué un obstacle en passant un mot de passe à psql. Voici un peu de code du script shell:

 psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
 

Comment puis-je transmettre un mot de passe à psql de manière non interactive?

Merci!

993voto

a_horse_with_no_name Points 100769

Définissez la variable d'environnement PGPASSWORD dans le script avant d'appeler psql:

http://www.postgresql.org/docs/current/static/libpq-envars.html

217voto

Flimzy Points 9245

De la documentation officielle :

Il est également pratique d’avoir un fichier ~ / .pgpass afin d’éviter de taper régulièrement des mots de passe. Voir Section 30.13 pour plus d'informations.

31voto

Srini Points 89

Cela peut être fait en créant un fichier .pgpass dans le répertoire de base de l'utilisateur (Linux). .pgpass format de fichier:

 <databaseip>:<port>:<databasename>:<dbusername>:<password>
 

Vous pouvez également utiliser un caractère générique * au lieu de détails.

Supposons que je souhaite exécuter tmp.sql sans demander de mot de passe.

Avec le code suivant, vous pouvez dans le fichier * .sh

 echo "192.168.1.1:*:*:postgres:postgrespwd" > $HOME/.pgpass
echo "` chmod 0600 $HOME/.pgpass `"

echo " ` psql -h 192.168.1.1 -p 5432  -U postgres  postgres  -f tmp.sql `        
 

-2voto

Adam Donahue Points 351

Bien sûr, nous devons ajouter l’avertissement habituel selon lequel un mot de passe spécifié sur la ligne de commande peut potentiellement être exposé via ps ou d’autres outils.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X