You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下psql -U postgres报Peer认证失败的原因及修复方案

问题原因

你遇到的报错是PostgreSQL的Peer认证规则触发导致的,核心逻辑如下:

  • 你的pg_hba.conf第一行配置了本地Unix套接字连接postgres用户时,使用peer认证方式,且PostgreSQL会按配置行的从上到下顺序匹配规则,匹配到第一条符合条件的规则后就不再往下匹配,所以你本地无参数连接postgres用户时永远命中这条peer规则,不会走下面的md5规则。
  • peer认证要求当前登录的Linux系统用户名,和你请求连接的PostgreSQL用户名完全一致才能通过校验:你用普通系统用户执行psql -U postgres时,系统用户名和PG的postgres用户不匹配,因此认证失败;执行sudo -u postgres psql时切换到了postgres系统用户,身份匹配因此能正常连接。
排查方法
  • 确认pg_hba.conf的实际路径,避免修改错配置文件,执行命令:
    sudo -u postgres psql -c 'show hba_file;'
    
  • 验证规则匹配逻辑:不加-h参数的psql命令默认走Unix域套接字,命中local类型规则;加-h 127.0.0.1参数的命令走TCP连接,命中host类型规则。
修复方案

你可以根据使用场景选任意一种方案:

  • 方案1:不修改配置,继续使用sudo -u postgres psql方式连接,这是默认最安全的管理方式,不需要额外改动。
  • 方案2:修改pg_hba.conf规则,允许用密码本地连接postgres用户:
    1. 把第一行的local all postgres peer改为local all postgres md5
    2. 重载PostgreSQL配置让改动生效:sudo systemctl reload postgresql
    3. 如果你还没给postgres用户设置数据库密码,先执行sudo -u postgres psql进入数据库,执行ALTER USER postgres PASSWORD '你设置的密码';设置密码,之后就能用psql -U postgres输入密码登录。
  • 方案3:临时用密码登录不需要改配置,指定走TCP连接即可:
    执行psql -U postgres -h 127.0.0.1,输入postgres用户的数据库密码就能正常登录。

内容的提问来源于stack exchange,提问作者JimmyTheCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:57:03