Navicat提示role "xxx" does not exist,说明PostgreSQL中该用户名未创建;需先用psql执行\du确认角色是否存在,再通过CREATE USER创建用户并设密码,同时检查pg_hba.conf中是否配置了对应IP和认证方式的允许规则。
navicat 连接 postgresql 时提示 role "xxx" does not exist,说明你填的用户名在 postgresql 里根本没创建,不是密码错、不是网络问题,是“人”不存在。
确认 PostgreSQL 中是否存在该角色
别急着改 Navicat 配置,先登录服务器或用 psql 验证用户是否真实存在:
- 用默认超级用户(通常是
postgres)连进去:psql -U postgres -d postgres - 执行
\du查看所有角色列表,注意大小写 —— PostgreSQL 默认区分大小写,Postgres和postgres是两个不同角色 - 如果目标用户不在列表中,错误原因就坐实了:用户未创建,而非连接参数输错
创建缺失的角色并设密码
用户不存在,就得手动补上。常见操作有三种场景:
- 创建普通用户(推荐):
CREATE USER app_user WITH PASSWORD 'secure123'; - 创建带建库权限的用户:
CREATE USER dev_user WITH PASSWORD 'devpass' CREATEDB; - 创建超级用户(仅调试用,生产禁用):
CREATE USER admin WITH PASSWORD 'admin' SUPERUSER;
注意:CREATE USER 和 CREATE ROLE ... LOGIN 效果等价,但前者更直观;密码必须用单引号包裹,且不能省略 WITH PASSWORD 子句,否则用户无法密码登录。
检查 pg_hba.conf 是否允许该用户从当前地址登录
即使角色存在,PostgreSQL 还要过「门禁」——pg_hba.conf 文件。常见疏漏点:
- 规则顺序很重要:匹配是自上而下,第一条匹配即生效,后面规则不读
- 如果你用 Navicat 从远程连接(比如公司电脑连服务器),必须有一条类似这样的规则:
host all app_user 192.168.1.0/24 md5 - 若只写了
local或host ... 127.0.0.1/32,远程 Navicat 就永远被拒,哪怕用户存在、密码正确 - 改完
pg_hba.conf必须 reload 配置:SELECT pg_reload_conf();或重启服务
Navicat 连接时用户名大小写与引号陷阱
PostgreSQL 对未加双引号的标识符会自动转小写,这是最容易踩的隐性坑:
- 你执行了
CREATE USER "MyUser" WITH PASSWORD '123';(带双引号)→ 角色名是严格大小写的MyUser - 但在 Navicat 连接配置里填
myuser或MYUSER,都会报role does not exist - 解决办法:要么创建时不加引号(统一用小写),要么 Navicat 里也填带双引号的
"MyUser"(但 Navicat UI 不支持直接输引号,得换用命令行或改配置文件) - 所以最稳妥的做法是:所有角色名用纯小写字母创建,避免引号和大小写混淆
真正麻烦的不是找不到解决方案,而是你以为在调 Navicat,其实是在调 PostgreSQL 的用户体系和认证策略——角色不存在,本质是数据库实例层面的身份管理没对齐,不是客户端工具的问题。


















