Navicat Premium 不支持直接从表列表生成 ER 图,必须先创建模型并逆向数据库结构;PostgreSQL 需确保用户有 pg_catalog SELECT 权限,且外键须显式定义才能正确连线。

Navicat Premium 不支持直接从表列表生成 ER 图
你右键点击某张 PostgreSQL 表,选「对象信息」或「导出向导」,都找不到“导出为 ER 图”的选项——这不是你操作遗漏,而是功能根本不存在。Navicat 的 ER 图查看和导出能力,只绑定在两个地方:数据库连接的临时 ER 视图(只读、不可导出),以及独立的「模型(Model)」文件(可编辑、可导出)。单张表或几张表的集合,无法跳过模型层直接产出 ER 图。
必须先创建模型,再导入表结构
这是唯一可行路径,且对 PostgreSQL 有特殊注意点:Navicat 依赖 pg_class、pg_attribute、pg_constraint 等系统表读取元数据,若当前连接用户权限不足(比如没被授予 SELECT 权限到 pg_catalog),模型导入会静默失败或缺失外键、注释等关键信息。
- 确保连接用户至少拥有
SELECTonpg_catalog.*(推荐用 superuser 或明确授权) - 在左侧连接树中,右键目标 PostgreSQL 数据库 → 选择「逆向数据库到模型」
- 向导中勾选「表」,如需视图/序列/函数,需手动勾选(默认不包含)
- 点击「开始」后,Navicat 执行多条
SELECT查询获取字段类型、默认值、NOT NULL、外键引用等——这个过程可能卡顿几秒,属正常 - 生成完成后,在左侧「模型」节点下会出现新模型,双击打开即可进入编辑器
导出前务必检查外键是否正确连线
PostgreSQL 中外键约束必须显式定义(ADD CONSTRAINT ... FOREIGN KEY),如果表已存在但没加外键,Navicat 模型里就不会出现连线——它不会基于字段名相似性(如 user_id 和 users.id)自动推断关系。常见错误现象:模型里所有表都是孤立矩形,没有连线。
- 执行
SELECT conname, confrelid::regclass, conrelid::regclass FROM pg_constraint WHERE contype = 'f' AND conrelid = 'your_table'::regclass;确认外键真实存在 - 若缺失,需先用
ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY补上,再删掉旧模型、重新「逆向数据库到模型」 - 模型编辑器中可右键表 → 「编辑表」→ 切换到「外键」标签页,手动添加(但不推荐,易与实际 DB 不一致)
导出 PDF/PNG 时字段重叠、连线交叉怎么办
Navicat 默认布局算法对 PostgreSQL 字段较多的表(如含 20+ 列)容易失效,导致字段文字挤在一起、连线打结。这不是渲染 bug,而是画布尺寸与自动排版策略不匹配。
- 导出前,先点顶部菜单「布局」→ 「自动布局」,等几秒让算法重排
- 仍不理想?手动拖动主表(如
orders)到画布中央,把关联表(customers、products)拖到四周,留出足够空白间距 - 选中连线 → 右键 → 「添加锚点」可折弯线条,避开文字区域(仅 Premium 版支持)
- 导出格式优先选
PNG(清晰)或SVG(矢量、可后续用 Inkscape 微调),避免用JPEG(有损压缩模糊文字)


















