J'essaie d'automatiser le processus de création de base de données avec un script shell et une chose que j'ai rencontré 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 de psql
manière non interactive?
bash
postgresql
command-line
Alex N.
la source
la source
Réponses:
De la documentation officielle :
...
la source
chmod go-rwx .pgpass
Définissez la variable d'environnement PGPASSWORD dans le script avant d'appeler psql
Pour référence, voir http://www.postgresql.org/docs/current/static/libpq-envars.html
Éditer
Depuis Postgres 9.2, il est également possible de spécifier une chaîne de connexion ou un URI pouvant contenir le nom d'utilisateur et le mot de passe.
Son utilisation présente un risque pour la sécurité car le mot de passe est visible en texte brut lorsque vous regardez la ligne de commande d'un processus en cours, par exemple en utilisant
ps
(Linux), ProcessExplorer (Windows) ou des outils similaires, par d'autres utilisateurs.Voir aussi cette question sur les administrateurs de bases de données
la source
space
dans la ligne de commande avant le premier caractère et la commande ne sera pas stockée dans l'historique bash. Fonctionne pour ubuntu / bash.docker run -e PGPASSWORD="$(pbpaste)" --rm postgres psql -h www.example.com dbname username -c 'SELECT * FROM table;'
en une seule ligne:
avec commande une commande sql telle que
"select * from schema.table"
ou plus lisible:
la source
PGPASSWORD='password' psql ....
ce qui a également l'avantage que la variable n'est pas accessible une fois la commande exécutée.export PGPASSWORD=YourNewPassword
travaillé pour moi sur d'autres variantes.export PGPASSWORD
sonne comme une très mauvaise idéeJ'ai tendance à préférer passer une URL à psql :
Cela me donne la liberté de nommer mes variables d'environnement comme je le souhaite et évite de créer des fichiers inutiles.
Cela nécessite
libpq
. La documentation se trouve ici .la source
Sous Windows:
Attribuez une valeur à PGPASSWORD:
C:\>set PGPASSWORD=pass
Exécuter la commande:
C:\>psql -d database -U user
Prêt
Ou en une seule ligne,
Notez le manque d'espace avant le &&!
la source
-w
également .PGPASSWORD=xxxx psql -U username -d database -w -c "select * from foo;"
travaux.Cela peut être fait en créant un
.pgpass
fichier dans le répertoire personnel de l'utilisateur (Linux)..pgpass
format de fichier:Vous pouvez également utiliser un caractère générique
*
à la place des détails.Disons que je voulais courir
tmp.sql
sans demander de mot de passe.Avec le code suivant, vous pouvez dans le fichier * .sh
la source
Une alternative à l'utilisation de la
PGPASSWORD
variable d'environnement consiste à utiliser laconninfo
chaîne selon la documentation :la source
Ajout du contenu de pg_env.sh à mon .bashrc:
avec ajout de (selon la suggestion de l'utilisateur4653174)
la source