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?
Avez-vous essayé de spécifier l'hôte et l'utilisateur?
pg_dump -U someuser -h localhost somedb > directory/somefile.dump
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
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.
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
.
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é:
--password
/-W
et password=
dans chaîne de connexion ne sont pas définis. Sinon, le fichier pgpass ne sera pas utilisé.PGPASSWORD
n'est pas définie (echo $PGPASSWORD
). Sinon, le fichier pgpass ne sera pas utilisé.$PGPASSFILE
ou par défaut ~/.pgpass
ou %APPDATA%\postgresql\pgpass.conf
)chmod 600 ~/.pgpass
); sinon psql
affichera un avertissement.psql
affichera un avertissement.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.*
. 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.