Navicat连不上PostgreSQL需依次排查:postgresql.conf中listen_addresses是否配置正确、pg_hba.conf是否添加对应host/user认证规则、用户名密码是否大小写精确匹配、Docker环境端口映射及配置重载是否完成。
Navicat 连不上 PostgreSQL 怎么办
逆向生成 er 图的前提是 navicat 能稳定连接目标数据库。常见连不上是因为 pg_hba.conf 没放行、密码认证方式不匹配,或 postgresql 服务没监听外部地址。
检查点列在下面,挨个确认:
- PostgreSQL 的
postgresql.conf中listen_addresses至少包含'localhost'或'*'(开发环境可临时设为'*') -
pg_hba.conf加了对应用户和 host 的条目,例如:host all all 127.0.0.1/32 md5 - Navicat 新建连接时,
Username和Password必须与 PostgreSQL 中的CREATE USER完全一致(区分大小写) - 如果用的是 Docker 启动的 PostgreSQL,确认端口映射正确(默认
5432),且容器内pg_hba.conf已重载(pg_ctl reload或重启容器)
逆向工程选“当前数据库”还是“指定模式”
Navicat 的逆向生成入口在「工具 → ER 图表 → 逆向工程」,但选错范围会导致表漏掉或报错。
PostgreSQL 默认 schema 是 public,但如果你的表分布在多个 schema(比如 auth、billing),必须手动勾选——Navicat 不会自动扫描所有 schema。
- 勾选「当前数据库」只生成当前连接默认 schema(通常是
public)下的表 - 要包含其他 schema,必须点开「高级」→「Schema」→ 勾选具体 schema 名(如
auth、app),否则外键关系可能断裂(比如auth.users引用public.roles,但public没被选中,就画不出连线) - 如果勾了多个 schema 但权限不足(用户没
USAGEon schema),逆向会卡住或报错permission denied for schema xxx,此时需先用 superuser 账号授权:GRANT USAGE ON SCHEMA xxx TO your_user;
ER 图里 foreign key 线没显示?检查约束类型
Navicat 只识别标准的 PostgreSQL 外键约束(FOREIGN KEY ... REFERENCES),对函数索引、部分索引、或用触发器模拟的逻辑关联无感知。
- 运行
\d+ table_name在 psql 里确认外键是否真实存在,输出中要有Foreign-key constraints:行 - 如果外键是用
ON DELETE CASCADE或带条件定义的,Navicat 仍能识别,但不会显示删除行为图标;它只画线,不标注动作 - 若表有外键但图里没线,大概率是该外键引用的表没被包含进逆向范围(比如引用了
other_db.other_table,跨库不支持) - Navicat 对复合外键支持正常,但字段顺序必须完全一致;顺序错位(如
(a,b)引用(b,a))会被忽略
导出图片模糊或字体发虚怎么办
Navicat 默认导出 PNG 分辨率低,尤其含中文时容易糊,这不是渲染 bug,而是导出设置问题。
- 导出前,在 ER 图界面右键 →「图表属性」→ 把
Zoom调高(比如200%),再导出 PNG,清晰度明显提升 - 导出 PDF 更可靠:PDF 是矢量格式,缩放不失真,且保留字体(前提是系统已安装对应中文字体,如 Noto Sans CJK)
- 如果图太大导致导出卡死,先「布局 → 自动布局」整理节点位置,再隐藏不关键的表(右键表 →「隐藏」),减少渲染压力
- 注意:Navicat Mac 版对 Retina 屏导出 PNG 有已知缩放 bug,建议优先用 PDF 或改用 Windows 版导出
PostgreSQL 的 schema 隔离比 MySQL 严格得多,逆向时漏选一个 schema,外键就断一半;而 Navicat 不报错也不提醒,只默默不画线——这是最常被忽略的环节。











