web-dev-qa-db-fra.com

Comment utiliser psql sans invite de mot de passe?

J'ai écrit un script dans les index REINDEX d'une base de données. Voici l'un d'entre eux:

echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
    echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
    echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
    exit 1
fi

Le problème est que je ne peux pas exécuter ce script en mode autonome. psql demande un mot de passe à chaque exécution. Il existe également deux limitations:

  1. Je ne peux pas créer d'utilisateur sur la base de données sans mot de passe.

  2. Parce que REINDEX verrouille les tables, je devrais utiliser sleep <num> entre chaque REINDEX.

Existe-t-il une solution automatique?

83
Majid Azimi

Vous avez quatre choix concernant l'invite de mot de passe:

  1. définissez la variable d'environnement PGPASSWORD. Pour plus de détails, consultez le manuel:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. utilisez un fichier .pgpass pour stocker le mot de passe. Pour plus de détails, consultez le manuel:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. utiliser "l'authentification de confiance" pour cet utilisateur spécifique:
    http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. utilisez un URI de connexion qui contient tout:
    http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532
127

Un exemple simple avec PGPASSWORD sera quelque chose comme:

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME

J'espère que cela aide.

22
pdm

En fonction des autorisations de votre compte, l'exemple sans spécifier la base de données peut échouer, car les autorisations utilisateur sont comparées à la base de données à laquelle vous vous connectez. Il vaut mieux aussi spécifier explicitement la base de données.

# this can fail.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME    

# this is more likely to work, assuming given account has permissions to that database.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME -d YOUR_DATABASE  
2
mtoonen

Réponses très utiles dans ce fil. J'ajoute juste ceci pour Ubuntu 18.04:

Sudo PGPASSWORD=yourpasswordHere -u postgres psql

Cela vous emmènera dans les postgres sans l'invite de mot de passe, sans avoir à définir de variables d'environnement. Ce n'est pas un cadre permanent.

0
Dhiraj