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!
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é.
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
-
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")
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 `
Sous Windows:
-
attribuer une valeur à PGPASSWORD:
C:\>set PGPASSWORD=pass
-
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 && !
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