以 root 用户身份登录服务器后,我需要通过 Unix 套接字以 postgres 用户身份进入数据库。这是我的 pg_ident.conf:
# MAPNAME SYSTEM-USERNAME PG-USERNAME
testmap postgres postgres
testmap root postgres
这是我的pg_hba.conf:
# TYPE DATABASE USER ADDRESS METHOD
local all all peer map=testmap
我已经执行了 pg_ctl reload,甚至重启了 postgresql 服务和服务器本身。通过 psql 连接时,我收到以下信息:
[root@<Server> ~]# psql -d postgres
psql: FATAL: no pg_hba.conf entry for host "[local]", user "root", database "postgres", SSL off
检查数据库内的 hba_file 和 ident_file,并确认我正在编辑的位置是正确的。
我还缺少其他配置吗?我必须在数据库中创建角色/用户 root 吗?
我已经在这里和 stackoverflow 上寻找类似的问题两天了,大多数问题只是忘记在 pg_hba.conf 中包含 map=<>。我还相信我所做的符合 PostgreSQL 手册中的说明。
顺便说一句,我使用的是 PostgreSQL 9.5.12。谢谢
答案1
我今天遇到了同样的问题,结果发现 Postgres 实际上会尝试承担通过参数传递的角色-U
。对我有用的是:
# psql -U postgres -d postgres
然后,身份验证将使用您的套接字对等用户名(root
),但您在身份验证后将成为postgres
。我不确定为什么 Postgres 不自行映射用户 - 这可能是文档问题,而不是错误。