Navicat 17 不支持直接运行 .nsx 同步任务做定时调度,因其已移除 navigator.exe 且 navicatCLI 不识别 -sync 参数;唯一可行路径是通过「工具 → 自动运行 → 新建批处理作业」调用「数据传输」任务,并确保 GUI 常驻运行、目标连接使用明文密码、手动配置类型映射与日志记录。

Navicat 17 不支持直接运行 .nsx 同步任务做定时调度
Windows 版 Navicat 17 已移除 navigator.exe,官方不再提供命令行驱动同步任务的能力。你保存的 .nsx 文件(如 pg_to_mysql_sync.nsx)在 17 版中无法被任何内置 CLI 工具调用执行——navicatCLI 仅支持 -backup 和 -restore,不识别 -sync 或 -runjob 参数。这不是配置问题,是功能删减。强行在任务计划中调用旧版路径会报错 File not found 或 Unknown option -sync。
必须改用「自动运行」+「批处理作业」组合
这是 Navicat 17 唯一可行的定时同步路径,但要注意它本质是 GUI 进程内调度,不是系统级后台服务:
- 同步任务必须在 Navicat GUI 中保持登录状态并处于前台/后台运行(最小化可接受,但不能被系统休眠或杀掉)
- 点击
工具 → 自动运行 → 新建批处理作业,把已配置好的「数据传输」任务(不是同步!是Data Transfer)拖进去 - 批处理作业里不能混用「数据同步」(
Data Synchronization)操作——它不支持跨库类型比对,PostgreSQL→MySQL 选「数据同步」会直接报错Unsupported source/target combination - 目标连接必须使用明文密码(勾选
Save password会导致定时执行时连接失败,错误日志为Authentication failed)
PostgreSQL→MySQL 类型映射必须手动干预
Navicat 17 的数据传输默认映射很粗糙,尤其对以下字段会静默出错或丢数据:
-
SERIAL/GENERATED ALWAYS AS IDENTITY→ 必须手动映射为INT NOT NULL AUTO_INCREMENT,且务必勾选Set as Primary Key,否则目标表无主键,后续 INSERT 失败 -
JSONB→ 默认转成TEXT,但 PostgreSQL 写入的{"a":1}在 MySQL 中可能被当字符串截断;建议提前在目标 MySQL 表中建JSON类型字段,并在「字段映射」页手动指定 -
TIMESTAMP WITH TIME ZONE→ Navicat 会丢掉时区信息,转成 MySQL 的DATETIME;若需保留,源端先用timezone('UTC', col)转换再传 - 所有双引号标识符(如
"user_id")会被自动转义失败,必须在「高级」→「导出设置」中勾选Use backticks for identifiers
定时触发后看不到日志?检查三个隐藏开关
很多人设完计划却收不到结果,不是没运行,而是被静默抑制了:
- 批处理作业属性里必须勾选
Log execution details to file,否则只有成功/失败状态,无 SQL 或错误详情 - 日志路径默认在
%APPDATA%\PremiumSoft\Navicat\Logs\,文件名类似BatchJob_20260907.log,不主动打开 Navicat 日志窗口就看不到 - 如果目标 MySQL 表有
ON UPDATE CURRENT_TIMESTAMP字段,Navicat 传输时会触发该逻辑导致行变更被误判为「数据不一致」,继而在预览页显示大量「更新记录」——实际只是时间戳被动刷新,可在传输选项中取消勾选Compare row values避免
Navicat 17 的跨库定时同步,核心矛盾在于它把「自动化」建立在 GUI 进程存活之上。一旦电脑锁屏、远程桌面断开、或 Windows 更新重启,任务就彻底中断。真要长期跑,得配一台永不关机的 Windows 虚拟机,且必须禁用睡眠和自动更新——这点比用 mysqldump + psql + cron 粗暴但可靠得多。


















