115

我尝试过使用主机变量PGPASSWORD.pgpass但这两者都不允许我对数据库进行身份验证。我已经chmod获得.pgpass了适当的权限,并且还尝试了:

export PGPASSWORD=mypass and PGPASSWORD=mypass

密码确实包含 a\但是我将它用单引号括起来PGPASS='mypass\',它仍然不会进行身份验证。

我在跑:

pg_dump dbname -U username -Fc

我仍然收到

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"
4

2 回答 2

224

快速解决方案

问题是它试图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

这告诉 Postgrespeer对本地用户使用身份验证,这需要 postgres 用户名与您当前的系统用户名匹配。第二行是指使用主机名的连接,并允许您通过该md5方法使用密码进行身份验证。

我的首选开发配置

注意:这应该只用于单用户工作站。这可能会导致生产或多用户机器上的重大安全漏洞。

在针对本地 postgres 实例进行开发时,我喜欢将本地身份验证方法更改为trust. 这将允许以任何没有密码的用户身份通过​​本地 unix 套接字连接到 postgres。只需将peer上面的内容更改为trust并重新加载 postgres 即可完成。

# Don't require a password for local connections
local   all             all                                     trust
于 2012-05-03T19:34:17.070 回答
12

有时你可以使用

sudo -u postgres pg_dump ...
于 2020-03-28T18:31:57.137 回答