PostgreSQL 报错解决:致命错误: 对用户 ‘xxx’ 的对等身份验证失败(Peer authentication failed)

这是 PostgreSQL 最常见的本地连接错误之一,尤其在新安装后的 CentOS、Ubuntu、Debian 等系统上特别容易遇到。本文将为您详细解析错误原因并提供快速解决方案。

一、错误原因(最常见的情况)

PostgreSQL 默认在本地连接(通过 Unix Socket)时使用 peer 认证方式:

  • peer 认证规则:操作系统用户名必须和 PostgreSQL 用户名完全相同,才允许免密登录。
  • 大多数人当前登录的系统用户是 rootcentosubuntu 等,而要登录的数据库用户通常是 postgres(默认超级用户)。
  • 结论:由于系统用户与数据库用户不匹配,导致 peer 认证失败并报错。

二、快速解决方案(推荐方式)

将本地连接的认证方式从 peer 改成 md5(密码认证),这样就可以通过密码登录了。

步骤(以主流 Linux 系统为例)

1. 找到 pg_hba.conf 文件位置

# Ubuntu/Debian
sudo find /etc/postgresql/ -name pg_hba.conf

# CentOS/RHEL/Rocky/AlmaLinux
sudo find /var/lib/pgsql/ -name pg_hba.conf

# 常见路径示例
/etc/postgresql/16/main/pg_hba.conf
/var/lib/pgsql/16/data/pg_hba.conf

2. 修改配置文件

用编辑器打开文件(需 root/sudo 权限),找到以下几行并修改:

# 建议改成(最常用、最方便)
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

更安全一点的写法(只给 postgres 用户开密码,其它保持 peer):

local   all             postgres                                md5
local   all             all                                     peer

3. 重新加载配置

# 方式1:优雅重载(推荐)
sudo systemctl reload postgresql

# 方式2:暴力重启
sudo systemctl restart postgresql

4. 设置密码并测试

如果还没设置过密码,先进入 psql 设置:

sudo -u postgres psql
# 执行:
ALTER USER postgres WITH PASSWORD '你的新密码';
\q

最后测试连接:

psql -U postgres -h 127.0.0.1 -W

三、常用认证方式对比

写法 含义 推荐场景 安全性
peer 系统用户 = 数据库用户 su – postgres 登录 ★★★★
md5 密码认证(最常用) 开发/测试/生产 ★★★
scram-sha-256 更安全的密码存储 (PG10+) 正式生产环境 ★★★★★
trust 任何人免密登录 临时调试(危险!) ☠☠☠

2025-2026 推荐做法
local all postgres scram-sha-256
host all all 127.0.0.1/32 scram-sha-256


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注