Navicat本身不提供SQL脚本版本追踪功能,因其是数据库客户端而非版本控制系统,无Git集成、分支管理或提交历史;真正可审计的版本追踪必须依赖外部Git工作流,将手动导出的.sql脚本、ERD导出文件等纳入仓库管理。

Navicat本身不提供SQL脚本版本追踪功能
Navicat Premium 是一个数据库客户端工具,不是代码版本控制系统。它没有内置的 Git 集成、分支管理或提交历史记录能力。你保存在 Query 窗口里的 SQL 脚本、保存为 .sql 文件的查询、甚至同步任务里的预处理脚本,都不会自动产生版本快照或 diff 记录。
真正能落地的版本追踪必须依赖外部 Git 工作流
把 SQL 脚本当源码管——这是最可靠、可审计、可协作的方式。关键在于明确哪些文件需要纳入 Git:
-
~/Documents/Navicat/Queries/或你自定义的 SQL 存储目录(Navicat 不强制路径,但建议统一) - 同步任务中导出的预处理/后处理脚本(需手动保存为
.sql文件,不能只存在任务配置里) -
ERD文件(.nav格式,文本化程度低,但部分版本支持导出为.sql或.png用于比对) - 避免纳入:
~/.navicat/下的加密配置、com.navicat.*.plist、钥匙串条目——这些是运行态数据,不是源码
Navicat 同步任务里的脚本怎么“导出可追踪”?
同步任务界面里写的预处理脚本,只是内存中的字符串,关掉任务窗口就丢失。想让它进版本库,必须主动导出:
- 在同步任务编辑页,全选脚本 →
Cmd+C→ 粘贴到 VS Code / Sublime / 记事本 → 保存为sync_pre_202610_v2.sql - 命名建议含日期、用途、迭代号,比如
mysql_to_pg_transform_v3.sql,方便 Git log 查阅 - 不要依赖 Navicat 的“保存到连接”功能——它存的是二进制 blob,Git 无法 diff
- 若脚本含敏感信息(如临时密码),先用占位符(
${DB_PASSWORD})代替,再通过 CI 环境变量注入,确保 Git 仓库干净
为什么别指望 Navicat 日志替代版本追踪?
QueryExec.log 只记执行痕迹,不存意图和上下文:
- 它按时间顺序写入,没有 commit message,无法说明“为什么改这行”
- 内容混杂所有连接的语句,无归属(哪个项目?哪个分支?谁执行的?)
- 默认不实时刷盘,重启 Navicat 才落盘,中间断电就丢
- 跨团队协作时,别人看不到你的
QueryExec.log,也无法 rebase 或 cherry-pick
真正的版本追踪难点不在工具链,而在习惯:SQL 脚本必须像应用代码一样,从诞生第一行起就处在 Git 管控之下——哪怕只是本地仓库。否则任何“自动记录”都只是幻觉。











