如何让pg_dump正确验证

时间:2012-05-03 11:42:29

标签: postgresql pg-dump

我尝试使用宿主变量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"

2 个答案:

答案 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 ...