如何让pg_dump正确验证

Kos*_*aut 94 postgresql pg-dump

我一直在使用主机变量尝试PGPASSWORD.pgpass并没有这两个让我来验证数据库.我已经chmod倒是.pgpass给适当的权限,也尝试过:

export PGPASSWORD=mypass and PGPASSWORD=mypass
Run Code Online (Sandbox Code Playgroud)

密码包含\但是我用单引号将其包装起来PGPASS='mypass\',但仍然无法进行身份验证.

我在跑:

pg_dump dbname -U username -Fc
Run Code Online (Sandbox Code Playgroud)

我仍然收到

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

Jim*_*ner 183

快速解决方案

问题是它正在尝试peer根据您当前的用户名执行本地身份验证.如果您想使用密码,则必须指定主机名-h.

pg_dump dbname -U username -h localhost -F c
Run Code Online (Sandbox Code Playgroud)

说明

这是由于您的以下内容 pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5
Run Code Online (Sandbox Code Playgroud)

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

我的首选开发配置

注意:这应仅用于单用户工作站.这可能会导致生产或多用户计算机上的主要安全漏洞.

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

# Don't require a password for local connections
local   all             all                                     trust
Run Code Online (Sandbox Code Playgroud)

  • 对于任何不确定你的conf文件在哪里的人:使用`sudo locate pg_hba.conf` - 它必须是sudo,因为postgres用户将是唯一一个可以访问该目录的用户(我认为). (4认同)

Rol*_*kas 7

有时你可以使用

sudo -u postgres pg_dump ...
Run Code Online (Sandbox Code Playgroud)