web-dev-qa-db-fra.com

postgresql: .pgpass ne fonctionne pas

J'ai créé un .pgpass fichier dans mon répertoire personnel qui ressemble à ceci

localhost:5432:somedb:someuser:somepass

J'utilise un script Shell qui crée un répertoire et y place un pg_dump de somedb:

mkdir directory
pg_dump somedb > directory/somefile.dump

Il demande toujours le mot de passe.

Où est l'erreur ici?

30

Avez-vous essayé de spécifier l'hôte et l'utilisateur?

pg_dump -U someuser -h localhost somedb > directory/somefile.dump
25
devnull

Bien que la question ait déjà été répondue et acceptée, il se peut également que les autorisations sur le fichier .pgpass ne soient pas correctement définies. L'accès au monde et aux groupes doit être interdit:

/bin/chmod 0600 ~/.pgpass
20
Nacho Mezzadra

1) Créez un fichier .pgpass avec du contenu

Hôte: 5432: somedb: someuser: somepass

2) définissez les autorisations à l'aide de la commande

Sudo chmod 600 .pgpass

3) Définissez le propriétaire du fichier comme le même utilisateur que celui avec lequel vous vous êtes connecté:

Sudo chown login_username: login_username .pgpass

4) Définissez la variable d'environnement PGPASSFILE:

export PGPASSFILE = '/ home/user/.pgpass'

Vérifiez maintenant en vous connectant à la base de données:

psql -h Host -U someuser somedb

Il ne demandera pas de mot de passe et sera connecté à postgresql.

8
Shrinivas

Vérifiez le propriétaire du fichier .pgpass. Je viens de perdre une demi-heure pour découvrir que j'avais créé mon fichier .pgpass avec Sudo. La commande pour mon utilisateur et mon emplacement était chown postgres:postgres /var/lib/pgsql/.pgpass.

5
Jonathan

psql ( startup.c ) appels PQconnectdbParams ( fe-connect.c ), puis passwordFromFile est appelé. Voici une liste de contrôle pour vous assurer que le fichier pgpass sera utilisé:

  1. Assurez-vous que les drapeaux --password/-W et password= dans chaîne de connexion ne sont pas définis. Sinon, le fichier pgpass ne sera pas utilisé.
  2. Assurez-vous que la variable d'environnement PGPASSWORD n'est pas définie (echo $PGPASSWORD). Sinon, le fichier pgpass ne sera pas utilisé.
  3. Assurez-vous que le fichier pgpass est au bon endroit ($PGPASSFILE ou par défaut ~/.pgpass ou %APPDATA%\postgresql\pgpass.conf)
  4. Assurez-vous que le fichier secret n'est pas lisible, inscriptible ou exécutable par groupe ou autre (par exemple chmod 600 ~/.pgpass); sinon psql affichera un avertissement.
  5. Assurez-vous que le fichier de passe est un fichier (pas un lien symbolique); sinon psql affichera un avertissement.
  6. Assurez-vous que le fichier de passe est lisible par l'utilisateur psql (par exemple cat ~/.pgpass); sinon psql l'ignorera sans avertissement. Assurez-vous qu'il appartient à l'utilisateur et que tous ses répertoires ancêtres sont exécutables par l'utilisateur.
  7. Assurez-vous que le nom d'hôte, le port, le nom de base de données, le nom d'utilisateur de la ligne dans le fichier pgpass correspondent au serveur ou sont *. Le "pwhost" du serveur qui est vérifié est le nom Host s'il n'est pas vide, ou l'adresse hostaddr ip. Sinon, le fichier sera ignoré sans avertissement.

Malheureusement, il n'y a pas de journalisation dans ces fichiers, donc si cela ne vous aide pas, vous devrez peut-être compiler psql et libpq vous-même et l'exécuter dans un débogueur.

3
yonran