我尝试使用宿主变量PGPASSWORD
和.pgpass
,这两个都不允许我对数据库进行身份验证。我有chmod
'd .pgpass
来获得适当的权限,并尝试过:
export PGPASSWORD=mypass and PGPASSWORD=mypass
密码包含\
但是我用单引号PGPASS='mypass\'
将其封装,但仍然无法进行身份验证。
我正在跑步:
pg_dump dbname -U username -Fc
我仍然收到
pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL: Peer authentication failed for user "username"
答案 0 :(得分:173)
快速解决方案
问题是它正在尝试根据您当前的用户名执行本地peer
身份验证。如果您想使用密码,则必须使用-h
指定主机名。
pg_dump dbname -U username -h localhost -F c
<强>解释强>
这是由于pg_hba.conf
local all all peer
host all all 127.0.0.1/32 md5
这告诉Postgres对本地用户使用peer
身份验证,要求postgres用户名与您当前的系统用户名相匹配。第二行是指使用主机名的连接,允许您通过md5
方法使用密码进行身份验证。
我的首选开发配置
注意:这应仅用于单用户工作站。这可能会导致生产或多用户计算机出现严重的安全漏洞。
在针对本地postgres实例进行开发时,我喜欢将本地身份验证方法更改为trust
。这将允许通过本地unix套接字连接到postgres,因为任何没有密码的用户。只需将peer
更改为trust
并重新加载postgres就可以完成。
# Don't require a password for local connections
local all all trust
答案 1 :(得分:0)
有时您可以使用
sudo -u postgres pg_dump ...