Postgresql: script d'exécution psql avec mot de passe

Comment puis-je appeler psql pour que ne demande pas un mot de passe ?

C'est ce que j'ai:

psql -Umyuser < myscript.sql

cependant, je n'ai pas pu trouver l'argument qui passe le mot de passe, et donc psql invite toujours pour lui.

208
demandé sur steakunderscore 2011-06-29 19:16:02

12 réponses

il y a plusieurs façons de s'authentifier à PostgreSQL. Vous pouvez rechercher des alternatives à l'authentification par mot de passe à https://www.postgresql.org/docs/current/static/client-authentication.html .

pour répondre à votre question, il existe plusieurs façons de fournir un mot de passe pour l'authentification par mot de passe. Le moyen évident est l'invite de mot de passe. Au lieu de cela, vous pouvez fournir le mot de passe dans un fichier pgpass PGPASSWORD variable d'environnement. Voir:

il n'y a pas d'option pour fournir le mot de passe comme argument de ligne de commande parce que cette information est souvent disponible pour tous les utilisateurs, et donc peu sûre. Cependant, dans les environnements Linux/Unix, vous pouvez fournir une variable d'environnement pour une commande unique comme celle-ci:

PGPASSWORD=yourpass psql ...
231
répondu Reece 2018-05-01 09:56:08
PGPASSWORD=[your password] psql -Umyuser < myscript.sql
124
répondu Greg 2013-12-04 07:48:24

, Vous pouvez ajouter cette ligne de commande au début de votre script:

set PGPASSWORD=[your password]
57
répondu jbaylina 2011-09-19 19:49:07

si vous avez l'intention d'avoir plusieurs serveurs/connexions de base de données, le ~/.pgpass fichier est le chemin à parcourir.

Suit:

  1. créer le ~/.pgpass fichier. Saisissez vos informations dans le format suivant nom d'hôte: port:base de données:nom d'utilisateur: mot de passe
  2. n'ajoutez pas de guillemets autour de vos valeurs de champ. Vous pouvez également utiliser * comme joker pour vos champs port/base de données.
  3. Créez un alias dans votre profil bash qui exécute votre commande psql pour vous. Par exemple: alias postygresy='psql --host hostname database_name -U username' les valeurs doivent correspondre à celles que vous avez entrées dans le ~/.pgpass fichier.
  4. Source votre profil bash.
  5. Tapez votre alias depuis la ligne de commande.

notez que si vous avez une exportation PGPASSWORD= " variable set, elle aura priorité sur le fichier. Il est également sage de modifier les permissions de votre fichier afin que le contenu est caché des autres utilisateurs. Cela peut être réalisé avec chmod 600 ~/.pgpass

38
répondu tandy 2015-01-13 17:38:35

vous devez créer un fichier de mots de passe: voir http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html pour plus d'information.

12
répondu Femi 2011-06-29 15:24:55

si vous avez des problèmes sur windows comme moi (j'utilise Windows 7 64-bit) et set PGPASSWORD=[Password] n'a pas fonctionné.

puis, comme Kavaklioglu l'a dit dans l'un des commentaires,

export PGPASSWORD=[password]

vous aurez besoin de le sauvegarder en haut du fichier, ou avant tout usage ainsi que son ensemble avant d'être appelé.

fonctionne certainement sur windows :)

11
répondu Jamie Hutber 2015-03-05 10:12:31

étant donné les préoccupations de sécurité liées à L'utilisation de la variable D'environnement PGPASSWORD, je pense que la meilleure solution globale est la suivante:

  1. écrivez votre propre fichier pgpass temporaire avec le mot de passe que vous voulez utiliser.
  2. utilisez la variable D'environnement PGPASSFILE pour dire à psql d'utiliser ce fichier.
  3. supprimer le fichier pgpass temporaire

il y a quelques points à noter ici. L'étape 1 est là pour éviter de coucher avec l'utilisateur ~/.pgpass fichier qui pourrait exister. Vous devez également vous assurer que le fichier dispose des autorisations 0600 ou moins.

certains ont suggéré d'exploiter bash pour raccourcir cela comme suit:

PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb

utilise la syntaxe <() pour éviter d'avoir à écrire les données dans un fichier réel. Mais cela ne fonctionne pas parce que psql vérifie quel fichier est utilisé et lancera une erreur comme ceci:

WARNING: password file "/dev/fd/63" is not a plain file
6
répondu mightybyte 2014-12-05 20:17:00

s'appuyant sur mightybyte la réponse de pour ceux qui ne sont pas à l'aise avec *nix shell script, voici un travail de script:

#!/bin/sh
PGPASSFILE=/tmp/pgpasswd$$
echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE
chmod 600 $PGPASSFILE
export PGPASSFILE
psql mydb
rm $PGPASSFILE

le signe double dollar ( $$ ) dans /tmp/pgpasswd$$ à la ligne 2 ajoute le numéro d'identification du processus au nom du fichier, de sorte que ce script peut être exécuté plus d'une fois, même simultanément, sans effets secondaires.

noter l'utilisation du chmod commande à la ligne 4-tout comme le" pas un fichier simple " erreur que " mightyoctet décrit, Il ya aussi un " autorisations " erreur si ce n'est pas fait.

à la ligne 6, Vous n'aurez pas à utiliser le -h myserver , le -p myport , ou -U jdoe drapeau si vous utilisez les valeurs par défaut ( localhost : 5432 ) et n'ont qu'un seul utilisateur de base de données. Pour plusieurs utilisateurs (mais la connexion par défaut), changez cette ligne en

psql mydb jdoe

N'oubliez pas de faire le script exécutable avec

chmod +x runpsql ( ou tout ce que vous avez appelé le fichier de script )

5
répondu Eliyahu Skoczylas 2017-09-20 04:42:09

il peut être fait simplement en utilisant PGPASSWORD. J'utilise psql 9.5.10. Dans votre cas, la solution serait

PGPASSWORD=password psql -U myuser < myscript.sql

4
répondu pyAddict 2018-01-23 06:09:14

je trouve, que psql show password prompt même si vous définissez la variable PGPASSWORD, mais vous pouvez spécifier l'option-w pour psql d'omettre la prompt password.

-1
répondu Mark Lokshin 2017-07-20 09:12:14

utiliser-w dans la commande: psql-h localhost-p 5432-U user-w

-5
répondu vjOnstack 2016-12-22 17:43:02