navicat 17 表设计器不显示 geometry 类型,因 postgresql 原生不提供该类型,需依赖 postgis 扩展,而 navicat 仅列出内置类型且不会自动加载扩展注册的类型,必须通过 sql 执行 create extension postgis; 后手动编写 ddl 创建 geometry 字段。
navicat 17 本身不支持通过可视化界面直接“添加”地理空间数据类型(如 geometry 或 geography),只能在建表时手动指定或通过 sql 创建字段;但支持对已有地理空间字段进行可视化查看。
为什么不能在表设计界面选中“Geometry”类型?
PostgreSQL 原生不提供 GEOMETRY 作为内置基础类型——它依赖 postgis 扩展。Navicat 的图形化类型下拉菜单只列出 PostgreSQL 自带类型(如 text、integer、jsonb),不会自动加载 postgis 注册的类型,除非你已启用扩展且 Navicat 刷新了元数据缓存。
- 即使你在数据库中执行过
CREATE EXTENSION postgis;,Navicat 表设计器仍不会出现geometry选项 - 试图在字段类型下拉里强行输入
geometry会报错:Unknown data type "geometry" - Navicat 17 的“类型”工具(
其他 → 类型)仅支持ENUM、RANGE、DOMAIN和复合类型,不支持注册postgis类型
正确创建含地理空间字段的表:必须用 SQL
唯一可靠的方式是绕过图形界面,直接执行 DDL:
- 确保目标数据库已启用
postgis:CREATE EXTENSION IF NOT EXISTS postgis; - 新建查询窗口,运行类似语句:
CREATE TABLE locations ( id SERIAL PRIMARY KEY, name VARCHAR(100), geom GEOMETRY(POINT, 4326) );
-
GEOMETRY(POINT, 4326)中的4326是 SRID,不可省略;若写成GEOMETRY(无参数),后续ST_AsText()可能返回空或报错 - 不要尝试用 Navicat 的“设计表”功能去修改已有字段为
geometry——它会静默失败或转成text
添加地理空间数据后,如何可视化?
只有字段真实为 GEOMETRY 类型且含有效 WKB/WKT 数据时,“Spatial Viewer”按钮才可用:
- 右键表 →
View Data,找到geom列,点击该单元格(不是列头) - 确认工具栏出现地图图标按钮(
Spatial Viewer),点击即可弹出地图视图 - 若按钮灰显或点击无反应,大概率是:
geom字段为空、类型不对(比如存成了text)、或数据格式非法(如 WKT 缺少括号、坐标顺序反了) - 验证数据是否合法:在查询中运行
SELECT ST_IsValid(geom), ST_AsText(geom) FROM locations LIMIT 1;
容易被忽略的关键点
PostGIS 类型不是“可选插件式组件”,而是深度绑定扩展状态和函数依赖的系统级对象。Navicat 的可视化能力完全依赖 PostgreSQL 元数据反馈——它不会主动探测扩展能力,也不会提示“请先安装 postgis”。一旦跳过 CREATE EXTENSION 或误删扩展,所有地理空间操作都会退化为字符串处理,且错误信息极其隐蔽(例如插入成功但 Spatial Viewer 不显示)。











