为何指定参数用psql连接PostgreSQL时出现Ident认证失败错误?
问题原因与解决办法
为什么会报Ident认证失败?
这两种连接方式走的是完全不同的认证逻辑:
- 直接输入
psql时,PostgreSQL客户端默认用Unix域套接字连接数据库,此时会匹配pg_hba.conf里的local规则,通常默认是peer认证——也就是直接校验你的操作系统用户名和数据库用户名是否一致,所以你能顺利登录。 - 当你加上
-h localhost参数后,客户端会切换成TCP/IP连接,这时会匹配pg_hba.conf里的host规则,默认配置的是ident认证。这种认证方式会通过Ident协议去验证客户端的操作系统用户身份,但很多系统要么没正确配置Ident服务,要么这个认证逻辑和你的场景不匹配,就导致了认证失败。
修改命令的两种可行方案
方案1:回到Unix套接字连接(最简便)
直接去掉-h localhost参数,命令改成:psql -U myusernamexy mydatabasexy这样就和你直接输入
psql的连接方式一致,利用peer认证就能正常登录。方案2:强制使用密码认证(如果需要TCP连接)
如果你确实需要用TCP/IP连接测试,可以加上-W参数强制要求输入密码(前提是你已经给myusernamexy设置了数据库密码,并且pg_hba.conf里host规则的认证方式是md5或scram-sha-256):psql -h localhost -p 5432 -U myusernamexy -W mydatabasexy执行命令后输入你的数据库用户密码就能成功连接。
内容的提问来源于stack exchange,提问作者nexonvantec
相关产品推荐
相关产品推荐

