我怎样才能得到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使用本地用户的peer
authentication,这需要postgres用户名来匹配你当前的系统用户名。 第二行是指使用主机名的连接,并允许您通过md5
方法使用密码进行身份validation。
我的首选发展configuration
注意 :这应该只在单用户工作站上使用。 这可能会导致生产或多用户机器上的主要安全漏洞。
当针对本地postgres实例进行开发时,我喜欢将我的本地身份validation方法更改为trust
。 这将允许通过本地unix套接字连接到postgres作为任何用户没有密码。 它可以通过简单地改变上面的peer
来trust
和重新加载postgres来完成。
# Don't require a password for local connections local all all trust