Skip to content

Navicat / DataGrip ​

Navicat 与 DataGrip 是两款主流商业数据库客户端:前者以「开箱即用的图形化操作」著称,后者以「JetBrains 系 IDE 的智能编码体验」著称。本节将对比两者的定位与能力,介绍各自的连接配置、核心功能与选型建议。

前置知识

阅读本节前,建议先了解:DBeaver

基础概念 ​

数据库客户端可以粗分为两类心智模型:

  • 管理型客户端(Administration-Oriented):以「操作数据库对象」为中心,鼠标点击即可建表、导数据、比对结构。典型代表是 Navicat、pgAdmin。
  • 编码型客户端(Code-Oriented):以「写 SQL」为中心,把数据库当作代码资产来编辑、重构、跳转定义。典型代表是 DataGrip、DBeaver。

Navicat 属于前者,DataGrip 属于后者。理解这个分类,比记住功能列表更重要——它决定了你日常工作的重心是「点」还是「敲」。

两款工具都不是免费的,都支持 PostgreSQL 18,都支持 SSH 隧道与 SSL 连接。区别主要在价格模型、平台覆盖与特色能力上。

术语英文名说明
连接配置Connection Profile保存主机、端口、库名、认证方式的一组配置
数据传输Data Transfer跨库/跨表搬运数据的向导
结构同步Structure Synchronization比对两个库的表结构差异并生成 DDL
数据同步Data Synchronization比对两个库的表数据差异并生成修补语句
代码补全Code Completion基于数据库元数据的 SQL 智能提示
重构Refactoring重命名对象并自动更新引用位置
数据源Data SourceDataGrip 中对一个连接配置的称呼

安装与配置 ​

版本与平台 ​

维度Navicat for PostgreSQLDataGrip
厂商PremiumSoft(香港)JetBrains(捷克)
授权商业授权,永久版 + 订阅版并行订阅制(含 All Products Pack)
免费方案14 天全功能试用30 天试用;学生/开源项目可申请免费
Windows支持支持
macOS支持(含 Apple Silicon 原生)支持(含 Apple Silicon 原生)
Linux支持(AppImage / deb / rpm)支持(Toolbox / snap / tar.gz)
界面风格传统工具栏式IDE 式(编辑器 + 工具窗口)
主要优势图形化向导齐全、上手快SQL 编写体验强、多库统一
主要短板SQL 编辑器能力弱于 IDE图形化管理向导相对少

安装命令 ​

bash
# ── Navicat for PostgreSQL ──
# 官网下载安装包:https://www.navicat.com.cn/download/navicat-for-postgresql
# macOS
brew install --cask navicat-for-postgresql

# Linux:下载 AppImage 后赋予执行权限
chmod +x navicat18-postgresql.AppImage
./navicat18-postgresql.AppImage

# ── DataGrip ──
# macOS
brew install --cask datagrip

# Linux:使用 JetBrains Toolbox(推荐,便于多版本共存)
# 或直接下载 tar.gz
tar -xzf datagrip-2026.1.tar.gz -C /opt
/opt/DataGrip-2026.1/bin/datagrip.sh
bash
# 无界面环境:DataGrip 无 CLI 版,可用其「数据库工具」的替代方案
# 若只需脚本化迁移,建议直接用 psql + pg_dump,而不是依赖 GUI 客户端
psql -h 127.0.0.1 -U app_user -d demo -c "SELECT version();"

连接配置(Navicat) ​

Navicat 新建连接需要填写「常规」「SSL」「SSH」「高级」四个标签页:

text
# Navicat 连接配置示例(新建连接 → PostgreSQL)
# ── 常规 ──
连接名     : demo-local
主机       : 127.0.0.1
端口       : 5432
初始数据库 : demo
用户名     : app_user
密码       : ********(可勾选「保存密码」)

# ── SSL ──
使用 SSL   : 勾选后可指定 CA 证书 / 客户端证书 / 客户端私钥
# ── SSH ──
使用 SSH 隧道 : 勾选后填写跳板机主机、端口、用户名与认证方式
# ── 高级 ──
编码       : UTF8
保持连接间隔: 240 秒

连接配置(DataGrip) ​

DataGrip 通过「数据源(Data Source)」管理连接,本质是一个 JDBC URL:

text
# DataGrip 数据源配置(Database 工具窗口 → + → Data Source → PostgreSQL)
Name     : demo-local
Host     : 127.0.0.1
Port     : 5432
Database : demo
User     : app_user
Password : ********
URL      : jdbc:postgresql://127.0.0.1:5432/demo
Driver   : PostgreSQL(内置,首次使用会自动下载)
bash
# DataGrip 也支持直接粘贴 JDBC URL,便于从工单/文档复制
# jdbc:postgresql://demo.example.com:5432/demo?sslmode=verify-full&ApplicationName=DataGrip

SSH 隧道与 SSL 连接 ​

生产库通常不允许从办公网直连,两款工具都内置了 SSH 隧道(SSH Tunnel),把「跳板机转发」这一步自动化:

text
# SSH 隧道的数据流向
[本机客户端] --TCP--> [本地转发端口] --SSH 加密--> [跳板机] --TCP--> [数据库 5432]

关键点是:勾选 SSH 隧道后,「主机 / 端口」要填写跳板机视角的数据库地址,而不是你笔记本视角的地址。

参数示例值说明
主机db.internal经隧道后由跳板机解析,可填内网域名或内网 IP
端口5432跳板机视角的数据库端口
SSH 主机jump.example.com跳板机公网地址
SSH 端口22跳板机 SSH 端口
SSH 用户deploy跳板机登录用户
认证方式私钥 / 密码优先私钥,不要把跳板机密码存进 GUI
bash
# 不依赖 GUI 时,可手动建立等价隧道并验证连通性
ssh -N -L 15432:db.internal:5432 deploy@jump.example.com

# 另开一个终端:此时本机的 15432 就等价于 db.internal:5432
psql -h 127.0.0.1 -p 15432 -U app_user -d demo \
  -c "SELECT inet_server_addr() AS server_ip, inet_server_port() AS server_port, current_user;"
text
# SSL 配置(Navicat 的「SSL」标签页 / DataGrip 的 SSL 下拉)
sslmode       : verify-full                # 生产建议;require 只加密、不校验证书
CA 证书        : /etc/postgresql/18/ssl/root.crt
客户端证书     : /etc/postgresql/18/ssl/client.crt   # 仅服务端要求 cert 认证时才需要
客户端私钥     : /etc/postgresql/18/ssl/client.key

sslmode 六个档位的语义、自签名证书的生成步骤,详见 SSL 连接初始化。

DataGrip 的 JDBC URL 参数 ​

DataGrip 底层使用 PGJDBC 驱动,连接字符串遵循 JDBC URL 语法,参数用 & 串联:

text
# jdbc:postgresql://{host}:{port}/{database}?{参数}
jdbc:postgresql://127.0.0.1:5432/demo
jdbc:postgresql://db.example.com:5432/demo?sslmode=verify-full&ApplicationName=DataGrip
jdbc:postgresql://127.0.0.1:5432/demo?currentSchema=app&connectTimeout=5&tcpKeepAlive=true
JDBC 参数取值示例作用
sslmoderequire / verify-full加密级别,语义与 libpq 一致
sslrootcert/etc/postgresql/18/ssl/root.crtCA 证书路径,verify-* 时必填
ApplicationNameDataGrip在 pg_stat_activity 中标识连接来源
currentSchemaapp设定 search_path 的首选 schema
connectTimeout5(秒)连接超时,避免 IDE 长时间卡在「正在连接」
tcpKeepAlivetrue长连接保活,避免被中间设备静默断开
reWriteBatchedInsertstrue批量 INSERT 改写为多值语法,导入场景显著提速

Navicat 的高级选项里也有等价的「保持连接间隔」与「连接超时」设置,作用类似。

详细说明 ​

Navicat 的价值集中在「不用写 SQL 也能完成的事」:

  • 数据传输(Data Transfer):在两个连接之间搬运表数据,可映射字段、设置批量提交行数、选择冲突处理策略
  • 结构同步(Structure Synchronization):比对两个库的表/索引/约束差异,生成可预览的 DDL 脚本后再执行
  • 数据同步(Data Synchronization):比对两表数据差异,生成 INSERT / UPDATE / DELETE 修补语句
  • 查询生成器(Query Builder):可视化拖拽生成 SQL,适合不熟悉语法的临时查询
  • 模型设计(Model):绘制 ER 图并直接同步到数据库
  • 备份与计划任务(Backup / Schedule):内置 pg_dump 封装与定时调度

Navicat 的「自动运行(Automation)」可以保存上述任务为配置文件,供命令行或计划任务调用:

bash
# Navicat Premium 的自动化配置文件可由命令行触发(静默执行)
# 这是 Navicat 少见的可脚本化能力,适合做夜间结构比对
navicat --run "sync_structure.ncfg"

Navicat for PostgreSQL 与 Navicat Premium 功能范围不同:只有 Premium 支持多数据库类型互通,也只有 Premium 提供完整的自动化与模型功能。

DataGrip 的核心能力 ​

DataGrip 的价值集中在「写 SQL 时的效率」:

  • 上下文感知补全:补全表名、列名、别名、函数,甚至能补全 JOIN 的连接条件
  • 重构(Refactoring):重命名表/列/别名时会同步更新当前文件乃至全工程的引用
  • 跳转到定义:Ctrl/Cmd + B 从表名跳到 DDL,从视图跳到其定义
  • 实时诊断:未使用的表别名、未解析的列会即时标红,不必等执行才报错
  • 多结果集:一次执行多条语句,结果以多标签页展示
  • 本地历史:每次执行都会留下 SQL 历史,可跨重启回溯
快捷键(macOS)功能
Ctrl + Enter执行当前语句
Cmd + Enter执行整个文件
Cmd + B跳转到表/视图定义
Cmd + Alt + L格式化 SQL
Cmd + Shift + F全局搜索(含 SQL 文件)
Alt + Enter显示意图操作(如「创建缺失的索引」)

两款工具的功能对照 ​

场景NavicatDataGrip
快速建表并填字段图形化网格,最直观需编写或生成 DDL
复杂多表查询编写一般强(补全 + 跳转 + 重构)
跨库结构与数据比对内置向导,开箱即用无内置,需第三方或手工 SQL
数据导入(Excel/CSV)向导完善支持,配置项偏技术化
ER 图内置模型工具内置 Diagrams + 导出 UML
版本控制集成无与 Git 深度集成(可管理 SQL 文件)
学习曲线低中(IDE 快捷键体系)
离线可用性需定期联网校验授权订阅校验,离线有一定期限

实战示例 ​

用 Navicat 做一次结构与数据同步 ​

场景:把开发库 demo 的 orders 表结构与新增数据同步到预发库 demo_staging。

text
# 操作步骤(Navicat)
# 1. 建立两个连接:demo-dev、demo-staging
# 2. 右键 demo-dev → 「结构同步」→ 选择目标连接 demo-staging
# 3. 在比对结果中勾选 orders 表(重点关注:新增列、索引、约束)
# 4. 点击「部署」,先复制生成的 DDL 用于评审
# 5. 结构同步完成后,再用「数据同步」比对 orders 行数差异
# 6. 数据同步时选择「使用 INSERT / UPDATE 语句」而非直接写库,便于回滚
sql
-- 同步完成后务必在目标库复核,不要只信 GUI 的「成功」提示
-- 用 psql 或 DataGrip 在 demo_staging 上执行
SELECT count(*) AS row_cnt FROM orders;

SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = 'orders'
ORDER BY ordinal_position;

-- 校验索引是否同步
SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'public' AND tablename = 'orders';

用 DataGrip 做一次安全的自定义查询 ​

场景:排查某用户近 30 天订单量异常,需要先看执行计划再取数。

sql
-- DataGrip:先按 Cmd+Enter 执行,看「执行计划」标签页
EXPLAIN (ANALYZE, BUFFERS)
SELECT u.email, count(*) AS order_cnt, sum(o.amount) AS total_amount
FROM users AS u
JOIN orders AS o ON o.user_id = u.id
WHERE o.created_at >= now() - interval '30 days'
GROUP BY u.email
HAVING count(*) > 100
ORDER BY total_amount DESC
LIMIT 20;
sql
-- 确认走的是 Index Scan / Bitmap Heap Scan 后,再去掉 EXPLAIN 取真实数据
SELECT u.email, count(*) AS order_cnt, sum(o.amount) AS total_amount
FROM users AS u
JOIN orders AS o ON o.user_id = u.id
WHERE o.created_at >= now() - interval '30 days'
GROUP BY u.email
HAVING count(*) > 100
ORDER BY total_amount DESC
LIMIT 20;
bash
# DataGrip 的「导出到文件」会把结果写成 CSV,注意分隔符与编码
# 若结果很大,不要在 GUI 里导出,改用 COPY 更稳
psql -h 127.0.0.1 -U app_user -d demo \
  -c "\copy (SELECT email, order_cnt FROM v_user_order_stats) TO '/tmp/order_stats.csv' WITH (FORMAT csv, HEADER true)"

注意事项 ​

  • 订阅与授权:DataGrip 需联网校验订阅,长期离线环境可能触发授权失效;Navicat 永久版也需定期校验。生产跳板机上部署前先确认授权策略。
  • GUI 操作不可审计:Navicat 的「一键同步」会直接改库,且默认不生成版本化脚本。任何结构变更都应导成 SQL 文件,走评审与版本控制,不要只在 GUI 里点。
  • 谨慎使用「数据同步」:它对差异行的判定依赖主键。若表没有主键或主键被改过,可能产生大量误删。执行前务必先预览生成的语句。
  • 大结果集别用 GUI 导出:客户端会把全部结果拉进内存再写文件,几十万行以上容易卡死。请改用服务端 COPY。
  • ApplicationName 很有用:在连接参数里设置 ApplicationName=Navicat 或 ApplicationName=DataGrip,便于在 pg_stat_activity 中区分是谁连的。
  • 别用 GUI 保存生产库密码:团队共用机器时,保存的密码等于明文共享。优先用 SSH 隧道 + 个人密钥,而非保存库密码。
  • 版本兼容:两款工具对 PostgreSQL 新版语法的支持通常滞后于官方发布,遇到新特性(如新版本的分区语法)解析失败时,先确认客户端版本,而不是怀疑数据库。
sql
-- 用 SQL 查清「当前是谁在连」,排查异常连接
SELECT pid, usename, application_name, client_addr, state, query_start
FROM pg_stat_activity
WHERE datname = 'demo'
ORDER BY query_start;

最佳实践 ​

  • 用 GUI 探索,用 SQL 落地:把 GUI 当「只读浏览器」用来理解结构与执行计划,把变更写成可评审的 SQL 脚本。
  • 为不同环境建不同连接:命名上体现环境(demo-dev / demo-staging / demo-prod),并用颜色区分(DataGrip 支持数据源着色,红色代表生产),避免误操作。
  • 生产库连接设为只读:在 DataGrip 数据源中勾选「Read-only」,从工具层面阻止误写。
  • 善用 DataGrip 的 SQL 工程:把迁移脚本纳入工程并接 Git,可获得补全、跳转与版本管理的叠加收益。
  • 统一团队工具链:如果团队已用 JetBrains 全家桶,选 DataGrip 可复用快捷键与主题;如果团队偏运维/实施,Navicat 的上手成本更低。
  • 客户端不做备份:无论 Navicat 的备份向导还是 DataGrip 的导出,都只是便利功能。生产备份请用 pg_dump / pg_basebackup 配合脚本与校验。

下一节

继续学习:命令行美化(pgcli)

参考链接 ​