navicat 连接 postgresql 15 失败主要因服务端强制 ssl 拦截或客户端查询已废弃字段 datlastsysoid 报错;前者需修改 pg_hba.conf 允许非 ssl 连接并重载配置,后者须升级 navicat 至 16.2+ 或临时修改 libcc.dll。
navicat 连接 postgresql 15 失败,大概率不是“连不上”,而是卡在两个明确的环节:服务端强制 ssl 拦截,或客户端查询废弃字段 datlastsysoid 报错。这两个问题彼此独立,但常被误认为同一故障;先确认错误信息再动手,否则改错地方白费时间。
看到 “SSL connection is required” 就改 pg_hba.conf
这个提示说明 PostgreSQL 15 已监听连接请求,但你在 pg_hba.conf 中没配允许非 SSL 的规则。它和 Navicat 是否勾选 SSL、注册表有没有删、证书路径对不对都无关——根本没走到那一步。
- 打开 PostgreSQL 数据目录下的
pg_hba.conf(用SHOW data_directory;确认路径),在末尾加一行:host all all 0.0.0.0/0 md5 - 确保
postgresql.conf中listen_addresses不是仅'localhost',至少设为'localhost,192.168.1.100'(填你服务器真实 IP)或'*' - 保存后必须执行
SELECT pg_reload_conf();,不是重启 Navicat,也不是重启整个 PostgreSQL 服务 - Windows 上注意文件扩展名别是
pg_hba.conf.txt(记事本默认隐藏扩展名);Linux 下权限必须是600,否则 PostgreSQL 启动时直接拒载
报 “column ‘datlastsysoid’ does not exist” 就查 Navicat 版本
PostgreSQL 15 彻底移除了 pg_database.datlastsysoid 字段,而旧版 Navicat(如 15.0.29 之前、16.1 之前)仍硬编码查询它。这不是配置问题,是二进制兼容性断层。
- 最稳妥解法:升级到 Navicat 16.2 或 17.x,官方已修复该字段引用
- 临时绕过(仅限开发环境):备份安装目录下的
libcc.dll,用十六进制编辑器(如 hexed.it)搜索SELECTDISTINCT datlastsysoid,替换成SELECT DISTINCT dattablespace - 替换后不能直接另存为
.dll——浏览器编辑器常会破坏文件头;应另存为.txt,再手动改后缀,并确认 Windows 未追加.txt - 此操作不被官方支持,升级 Navicat 后务必还原原
libcc.dll,否则可能引发其他元数据查询异常
连通性正常但一直 “password authentication failed”
输对了账号密码还失败,基本锁定在 pg_hba.conf 的认证方式不匹配。Navicat 只支持密码类认证,不支持 peer、ident 或系统级方法。
- 检查匹配你连接来源的那条规则,
auth-method字段必须是md5、password或scram-sha-256 - 若服务端启用了
scram-sha-256,Navicat 15 以下版本无法识别,需降级服务端配置(改postgresql.conf的password_encryption = md5)或升级客户端 - 本地连接用
localhost时,Navicat 默认走 TCP;想走 Unix socket 应改 host 为/var/run/postgresql(Linux/macOS)或留空(部分版本) -
database字段必须填真实存在的库名,且大小写敏感;空着会尝试连postgres,但该库可能被禁用普通用户访问
真正麻烦的从来不是单个错误,而是把 SSL 配置、字段兼容、认证协议、网络监听这四层叠在一起排查。每次只动一个变量,改完立刻验证,否则你会在 pg_hba.conf 里加十行规则,却忘了 pg_reload_conf() ——那改了等于没改。











