Navicat 实现 MySQL 到 PostgreSQL 定时迁移需分两步:先配置数据传输并保存为 .sync 文件,再将其导入自动运行的批处理作业;跳过保存将导致定时任务无法复用。
navicat 能直接实现 mysql 到 postgresql 这类异构数据库的定时迁移,但必须分两步走:先配置好 数据传输 任务并保存为 .sync 文件,再把它塞进 自动运行 的批处理作业里。跳过保存配置这一步,定时任务根本没法复用,每次都会重新向导——没人想凌晨三点手动点“下一步”。
怎么配通 MySQL → PostgreSQL 的数据传输
跨库传输失败,八成卡在连接或类型映射上。Navicat 不会自动帮你建目标表,也不会把 MySQL 的 TINYINT(1) 当布尔值塞进 PostgreSQL 的 BOOLEAN 字段,得人工干预。
- 源连接选 MySQL,目标连接必须是已验证通过的 PostgreSQL 实例;连接名建议带环境后缀,比如
pg_prod、mysql_dev - 在“对象选择”页勾选表后,点右下角
高级→字段映射,重点检查:TINYINT改成BOOLEAN,DATETIME改成TIMESTAMP WITHOUT TIME ZONE,否则传输会报错或丢精度 - 勾选
创建前删除目标对象要极度谨慎——它会执行DROP TABLE,生产环境禁用;日常同步建议取消勾选,用追加或更新模式 - 务必点击
保存,生成一个 .sync 文件(例如mysql_to_pg_orders.sync),路径记清楚,后面自动运行要用
为什么自动运行里不能直接选“数据传输”,而要拖 .sync 文件
自动运行 界面里的“添加工作”列表里确实有“数据传输”,但它只是个空壳入口。真要跑异构迁移,必须用你亲手保存的那个 .sync 配置文件——它固化了所有字段转换规则、表过滤条件和目标库连接上下文。直接选“数据传输”新建,等于又开一次向导,定时任务一触发就卡在交互界面。
- 打开
自动运行→ 新建批处理作业 → 点击“添加工作”下方的空白区,把刚保存的mysql_to_pg_orders.sync文件直接拖进来 - 拖入后双击该条目,可确认源/目标连接是否仍有效;若显示“连接不可用”,说明那个连接已被删或改名,需重新编辑 .sync 文件或重建连接
- 一个批处理作业里可以拖多个 .sync 文件,比如先同步用户表,再同步订单表——注意用“上移/下移”调整顺序,外键依赖不能乱
计划没跑?先去 Windows 任务计划程序里看真实状态
Navicat 的“设置计划”只是个前端,背后调用的是 Windows 任务计划程序。很多定时失败不是 Navicat 的锅,而是系统级权限或路径问题。
- Win + R 输入
taskschd.msc打开任务计划程序,找到以Navicat开头的任务,看“上次运行结果”列——0x1是权限不足,0x2是路径找不到 .sync 文件,0x4是连接认证失败 - 右键任务 → 属性 → 勾选
使用最高权限运行;如果灰色不可点,说明当前登录账户不是管理员,需切换至Administrator账户重配 - .sync 文件路径不能含中文或空格;建议统一放
C:\navicat_jobs\下,并在 Navicat 中用绝对路径引用 - 首次测试别设每天一次,先设“仅运行一次”,延迟 2 分钟,方便快速验证日志和结果
真正麻烦的从来不是点几下鼠标,而是 .sync 文件里那些没显式提示的隐式依赖:某个 PostgreSQL 用户缺少 CREATE TABLE 权限、MySQL 的 max_allowed_packet 太小导致大字段截断、甚至时区配置不一致让 NOW() 在两边差出 8 小时。定时任务一旦跑起来,这些细节全会变成凌晨三点的告警邮件。


















