Navicat 15 默认无法连接 PostgreSQL 16,因其内置 SQL 硬编码引用已被移除的 datlastsysoid 列;Navicat 16.0.12+ 已适配,推荐升级或改用 pgAdmin 4、psql 等兼容工具。
navicat 15 默认无法连接 postgresql 16,核心原因是其内置查询硬编码了已被移除的系统列 datlastsysoid;直接改 libcc.dll 是临时 workaround,不是长期解法。
为什么 Navicat 15 连不上 PostgreSQL 16?
PostgreSQL 16 移除了 pg_database 表中的 datlastsysoid 列,而 Navicat 15 的连接逻辑里有一条类似 SELECT DISTINCT datlastsysoid FROM pg_database WHERE datname = ? 的 SQL。一执行就报错:ERROR: column "datlastsysoid" does not exist。
这不是密码错、端口不通或权限问题,而是工具与数据库元数据接口不匹配的典型版本冲突。
- 该列早在 PostgreSQL 15 中已被标记为 deprecated,16 正式删除
- Navicat 16(含 16.0.12+)已适配,但 Navicat 15 全系未修复
- 错误只在连接成功后加载数据库列表时触发,所以“测试连接”可能通过,但左侧树形结构空白或报错
临时方案:手动修改 libcc.dll(仅限 Windows)
这是目前最快速让 Navicat 15 继续用的方式,但需谨慎操作:
- 先备份原文件:
libcc.dll通常位于Navicat Premium 15\drivers\或Navicat for PostgreSQL 15\drivers\目录下 - 用十六进制编辑器(如 HxD)打开
libcc.dll,搜索 ASCII 字符串datlastsysoid - 将其替换为长度相同的其他合法列名,例如
dattablespace(注意:必须严格等长,8 字节 → 用空格补足) - 保存后重启 Navicat;若替换后仍报错,说明还有第二处引用,需继续查找
⚠️ 风险提示:DLL 修改违反软件许可协议;升级 Navicat 或打补丁后该文件会被覆盖;macOS/Linux 用户无此路径,此法无效。
推荐方案:升级到 Navicat 16 或换用官方工具
Navicat 16.0.12 及以上版本已内置兼容 PostgreSQL 16 的驱动,无需任何 hack:
- 下载地址以官网为准:
navicat.com/download,确认版本号含 “16.” - 安装时建议卸载旧版,避免配置残留干扰
- 若受限于授权,可临时用
pgAdmin 4(PostgreSQL 官方免费 GUI),它对 16 原生支持,且更新及时 - 命令行用户可直接用
psql,连接字符串格式为:psql -h <host> -p <port> -U <user> -d <dbname></dbname></user></port></host>
别漏掉服务器端配置(否则连都连不上)
即使客户端版本没问题,PostgreSQL 16 默认仍拒绝远程连接:
- 检查
postgresql.conf:确保listen_addresses不是'localhost',至少设为'*'或具体 IP - 检查
pg_hba.conf:加一条规则,例如host all all 0.0.0.0/0 scram-sha-256(生产环境请限制 IP 段) - 改完配置后必须执行
pg_ctl reload或重启服务,systemctl restart postgresql - 防火墙要放行对应端口(默认 5432),Windows Defender 防火墙也需单独配置入站规则
真正卡住人的往往不是 datlastsysoid,而是 pg_hba.conf 里少了一行 host 规则——这个错误不会报具体列名,只会显示 “connection refused” 或 “password authentication failed”。


















