无法备份 Postgres 数据库:致命:用户“postgres”的对等身份验证失败

Dir*_*dNJ 3 postgresql authentication backup configuration

我可以毫无问题地远程连接到我的数据库,无论是从我们的网络服务器上的 PHP 脚本还是使用 PGAdmin3。

不幸的是,当我尝试在服务器本身上本地运行 pg_dump 备份时,我得到:

pg_dump --username=postgres -W omega | gzip > omega.10.10.13.gz
Run Code Online (Sandbox Code Playgroud)
pg_dump: [archiver (db)] connection to database "omega" failed:  
FATAL:  Peer authentication failed for user "postgres"
Run Code Online (Sandbox Code Playgroud)

以前我的数据库根本没有密码,但为了尝试解决这个问题,我实际上给了 postgres 用户一个密码。仍然没有骰子,对等身份验证每次都失败。

这是我的 pg_hba.conf 文件中的设置...请告诉我可以做什么来解决这个问题。真的想在我的数据库上运行一些备份。

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5 
#host    replication     postgres        ::1/128                 md5

host    all             all             70.89.205.250/24        md5 
host    all             all             23.21.112.163/24        md5 
host    all             all             24.188.1.163/24         md5 
Run Code Online (Sandbox Code Playgroud)

小智 5

这是 Postgres 客户端的一个奇怪的怪癖,远程或脚本中的客户端通常使用其地址连接到服务器,然后通过密码进行身份验证,但是当您通过命令行客户端从同一台计算机连接时,它会尝试使用对等身份验证,您会收到该错误。我从这个答案中发现,您可以通过简单地指定主机来修复它:

pg_dump -h 127.0.0.1 --username=postgres -W omega | gzip > omega.10.10.13.gz
Run Code Online (Sandbox Code Playgroud)

这就是 PHP 脚本在内部所做的事情。我更喜欢这个修复,因为它不会扰乱任何全局配置,并且我认为您可能也想了解它。