Comment puis-je spécifier un mot de passe à psql de façon non interactive?

j'essaye d'automatiser le processus de création d'une base de données avec un script shell et une chose que j'ai bloquée 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 transmettre un mot de passe à psql d'une manière non interactive?

Merci!

197
demandé sur Flimzy 2011-06-20 01:06:06

6 réponses

De la documents officiels :

Il est aussi pratique d'avoir un ~/.pgpass fichier pour éviter d'avoir à taper régulièrement des mots de passe. Voir l'Article 30.13 pour plus d'informations.

...

ce fichier doit contenir les lignes du format suivant:

hostname:port:database:username:password

le le champ password de la première ligne qui correspond aux paramètres de connexion actuels sera utilisé.

85
répondu Flimzy 2017-12-20 17:28:48

définissez la variable D'environnement PGPASSWORD à l'intérieur du script avant d'appeler psql

PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName

pour référence, voir http://www.postgresql.org/docs/current/static/libpq-envars.html


modifier

depuis Postgres 9.2 il y a aussi la possibilité de spécifier une chaîne de connexion ou URI qui peut contenir le nom d'utilisateur et mot de passe.

L'utilisation de ce mot de passe constitue un risque de sécurité car le mot de passe est visible en clair lorsque l'on regarde la ligne de commande d'un processus en cours d'exécution, par exemple en utilisant ps (Linux), ProcessExplorer (Windows) ou des outils similaires, par d'autres utilisateurs.

Voir Aussi cette question sur Database Administrators

375
répondu a_horse_with_no_name 2017-12-20 20:30:16
  • sur une ligne:

    export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'
    

    avec commande une commande sql telle que "select * from schema.table"

  • ou plus lisible:

    export PGPASSWORD='password'
    psql -h 'server name' -U 'user name' -d 'base name' \
         -c 'command' (eg. "select * from schema.table")
    
75
répondu user4653174 2015-03-10 10:08:40

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

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

vous pouvez également utiliser le Joker * à la place des détails.

dire que je voulais lancer tmp.sql sans demander un mot de passe.

avec le code suivant, vous pouvez entrer *.sh file

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 `        
17
répondu Srini 2012-09-16 15:14:06

Sous Windows:

  1. attribuer une valeur à PGPASSWORD: C:\>set PGPASSWORD=pass

  2. Exécution de la commande: C:\>psql -d database -U user

Prêt

ou sur une ligne,

set PGPASSWORD=pass&& psql -d database -U user

Note le manque d'espace avant le && !

11
répondu JAGJ jdfoxito 2018-03-04 15:02:08

j'ai tendance à préférer passer une url à psql:

psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"

cela me donne la liberté de nommer mes variables d'environnement comme je le souhaite et évite de créer des fichiers inutiles.

il faut libpq . La documentation peut être trouvée ici

8
répondu Jacques Gaudin 2018-04-29 11:46:22