我怎样才能得到pg_dump进行正确的身份validation

我曾尝试使用主机variablesPGPASSWORD.pgpass ,这两个都不会允许我对数据库进行身份validation。 我有.pgpass适当的权限,也试过:

 export PGPASSWORD=mypass and PGPASSWORD=mypass 

密码确实包含一个\但是我把它包装在单引号PGPASS='mypass\' ,它仍然不会进行身份validation。

我在跑:

 pg_dump dbname -U username -Fc 

我仍然收到

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

快速解决scheme

问题是,它试图根据您当前的用户名执行本地peer身份validation。 如果您想使用密码,则必须使用-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使用本地用户的peerauthentication,这需要postgres用户名来匹配你当前的系统用户名。 第二行是指使用主机名的连接,并允许您通过md5方法使用密码进行身份validation。

我的首选发展configuration

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

当针对本地postgres实例进行开发时,我喜欢将我的本地身份validation方法更改为trust 。 这将允许通过本地unix套接字连接到postgres作为任何用户没有密码。 它可以通过简单地改变上面的peertrust和重新加载postgres来完成。

 # Don't require a password for local connections local all all trust