Je l' ai essayé d' utiliser la variable hôte PGPASSWORD
et .pgpass
ni de ces deux me permettra d'authentifier la base de données. J'ai chmod
« d .pgpass
aux autorisations appropriées et aussi essayé:
export PGPASSWORD=mypass and PGPASSWORD=mypass
Le mot de passe contient un \
mais je l'ai mis entre guillemets simples PGPASS='mypass\'
et il ne s'authentifiera toujours pas.
Je suis entrain de courir:
pg_dump dbname -U username -Fc
et je reçois toujours
pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL: Peer authentication failed for user "username"
postgresql
pg-dump
Kosmonaut
la source
la source
Réponses:
La solution rapide
Le problème est qu'il essaie d'effectuer une
peer
authentification locale en fonction de votre nom d'utilisateur actuel. Si vous souhaitez utiliser un mot de passe, vous devez spécifier le nom d'hôte avec-h
.Explication
Cela est dû à ce qui suit dans votre
pg_hba.conf
Cela indique à Postgres d'utiliser l'
peer
authentification pour les utilisateurs locaux qui nécessite que le nom d'utilisateur postgres corresponde à votre nom d'utilisateur système actuel. La deuxième ligne fait référence aux connexions utilisant un nom d'hôte et vous permettra de vous authentifier avec un mot de passe via lamd5
méthode.Ma configuration de développement préférée
REMARQUE : cela ne doit être utilisé que sur les postes de travail mono-utilisateur. Cela pourrait conduire à une faille de sécurité majeure sur une machine de production ou multi-utilisateurs.
Lors du développement sur une instance postgres locale, j'aime changer ma méthode d'authentification locale en
trust
. Cela permettra de se connecter à postgres via une socket unix locale comme n'importe quel utilisateur sans mot de passe. Cela peut être fait en changeant simplementpeer
ci-dessustrust
et en rechargeant postgres.la source
sudo locate pg_hba.conf
- il doit être sudo car l'utilisateur postgres sera le seul à avoir accès au répertoire (je pense).Parfois, vous pouvez utiliser
la source