Navicat 连接 PostgreSQL 失败主要排查三项:host(注意 Docker/远程需填真实 IP 或 WSL2 IP)、port(默认 5432,须与服务端一致)、database(必须存在且大小写精确);其次检查 pg_hba.conf 认证方式、SSL 模式匹配及 client_encoding/search_path 设置。
连接失败时先看这三项:host、port、database
navicat 连不上 postgresql,八成卡在这三个字段上。默认 host 填 localhost 或 127.0.0.1,但 docker 或远程部署时得换真实 ip;port 默认是 5432,改过的话必须对上;database 必须是已存在的库名,不能填错大小写(postgresql 对库名大小写敏感,除非用双引号建的)。
常见错误现象:FATAL: database "mydb" does not exist 或 Connection refused。前者查库是否存在,后者优先确认 PostgreSQL 是否在运行、端口是否被防火墙拦住。
-
host为localhost时走 Unix socket(Linux/macOS),想强制走 TCP 就填127.0.0.1 - Windows 上若用 WSL2 的 PostgreSQL,
host得填 WSL2 的 IP(不是localhost) -
database字段不能留空——Navicat 会尝试连postgres系统库,但有些环境禁用了该库的普通用户访问
用户名和密码验证方式不匹配:pg_hba.conf 是关键
输对了 username 和 password 还报 password authentication failed?问题不在 Navicat,而在 PostgreSQL 服务端的 pg_hba.conf 文件没配好认证方式。
使用场景:本地开发通常用 md5,Docker 镜像可能默认用 trust(不校验密码),生产环境建议 scram-sha-256。Navicat 不支持 peer 或 ident 这类系统级认证,所以 pg_hba.conf 里对应连接类型的 method 必须是密码类(md5、scram-sha-256 或 password)。
- 改完
pg_hba.conf必须执行SELECT pg_reload_conf();或重启服务,否则不生效 - Navicat 的
Save Password勾选与否不影响连接逻辑,只影响本地密码缓存 - 如果 PostgreSQL 是 10+ 版本且用
scram-sha-256,Navicat 15+ 才原生支持;旧版 Navicat 可能要降级服务端配置或升级客户端
SSL 模式选错导致连接中断:disable / require / verify-ca
PostgreSQL 默认不强制 SSL,但很多云服务(如 AWS RDS、阿里云 RDS)默认开启强制加密,此时 Navicat 若选 disable 就直接断开,错误信息可能是 server does not support SSL, but SSL was required。
参数差异明显:disable 完全不用 SSL;require 会尝试加密,但不校验证书;verify-ca 或 verify-full 要求提供 CA 证书路径(sslrootcert),常用于自签或私有 CA 场景。
- 云数据库首选
require,简单有效,不需额外证书文件 - 本地自建 PostgreSQL 开启 SSL 后,若用
verify-full,必须填对sslcert、sslkey、sslrootcert三路径,且权限要设为 600(尤其sslkey) - Navicat 的 SSL 设置藏在连接窗口底部的
SSL标签页,容易漏点开
字符集与搜索路径影响查询结果:client_encoding 和 search_path
连上了,但中文变问号、函数找不到、表提示不存在?大概率是客户端编码或 schema 搜索顺序不对。PostgreSQL 的 client_encoding 决定 Navicat 发送 SQL 时的字符解释方式,search_path 决定它默认查哪个 schema 下的对象。
性能影响不大,但行为偏差很隐蔽。比如建表时没加 public. 前缀,又把 search_path 改成 myschema,Navicat 就会去 myschema 找表,而不是默认的 public。
- 中文乱码优先检查 Navicat 连接设置里的
Client Encoding是否设为UTF8(不是GBK或空) -
search_path在连接高级设置里可填,多个 schema 用逗号分隔,例如myschema,public - 修改
search_path不影响已有连接的当前 session,新连接才生效;临时改用SET search_path TO myschema;
最麻烦的是 search_path 和权限叠加:即使你有 myschema 的 USAGE 权限,但没 SELECT 权限,Navicat 查表时仍报 permission denied,这时得回命令行逐个确认权限。











