Navicat Premium 不支持跨库“一键备份同步”;MySQL↔PostgreSQL同步须拆解为手动建表+数据传输两步,且需人工干预字段映射、序列重置与字符集配置,无法通过备份功能实现。

Navicat Premium 本身不支持跨数据库的“一键备份同步”,所谓“MySQL ↔ PostgreSQL 同步”必须拆解为两个独立动作:数据传输(单向搬运)或结构+数据比对(仅限同构),而“备份”功能天然不跨库——你无法用 Navicat 的「备份」菜单直接把 MySQL 备份成 PostgreSQL 兼容格式。
数据传输 ≠ 备份,也不能自动同步
Navicat 的「数据传输」功能只做一次性数据搬运,不保留历史版本、不增量、不校验一致性、不生成可回滚的备份文件。它和「备份」是两条平行路径:
- 「备份」生成的是
.nbu文件,仅限同库类型(MySQL 备份只能恢复到 MySQL) - 「数据传输」导出的是运行时快照,目标库必须提前建好表结构,且字段映射需人工干预
- 想实现“每天同步订单表”,不能靠「备份」菜单定时,必须走「数据传输 → 保存为 .sync 文件 → 批处理作业 → Windows 任务计划程序」链路
MySQL 到 PostgreSQL 必须手动建表再传数据
Navicat 默认勾选「创建目标表」时生成的 DDL 极不可靠:TINYINT(1) 变成 INT、DATETIME 不转 TIMESTAMP WITHOUT TIME ZONE、JSON 字段丢掉 jsonb 类型修饰符。结果就是 INSERT 阶段报错或数据截断。
- 先在 MySQL 执行
SHOW CREATE TABLE users,复制建表语句 - 手动改写为 PostgreSQL 兼容语法:
AUTO_INCREMENT→SERIAL,TINYINT(1)→BOOLEAN,LONGTEXT→TEXT - 所有字段名统一小写(如
CreatedAt改成createdat),避免 PostgreSQL 报column does not exist - 在 PostgreSQL 中执行
CREATE TABLE成功后,再进「数据传输」并取消勾选「创建表」
同步失败最常见的三个硬坑
90% 的卡顿、乱码、主键冲突都来自这三处配置遗漏,不是网络或权限问题:
-
Reset sequences没勾选 → PostgreSQL 的serial序列不更新,下次插入必报duplicate key value violates unique constraint - MySQL 连接「高级」里没加
SET client_encoding='UTF8'→ 中文变问号,emoji 变 - 字段映射没点开「高级→字段映射」逐项确认 →
TINYINT还是传成INTEGER,DATETIME还是塞进TIMESTAMP WITH TIME ZONE,导致时区偏移或精度丢失
Windows 下唯一可行的定时方案:navigator.exe + .sync + 任务计划程序
macOS/Linux 用户请直接放弃 Navicat 自动同步逻辑——navicatCLI 不支持 -sync 参数运行 .sync 文件,官方无替代方案。
- 先 GUI 配好传输任务,点击右下角「保存」生成
mysql_to_pg_orders.sync(路径别含中文或空格) - 命令行测试:
"C:\Program Files\PremiumSoft\Navicat Premium 16\navigator.exe" -sync "D:\Tasks\mysql_to_pg_orders.sync" - 若报
Failed to load connection,打开该 .sync 文件用文本编辑器删掉"SavePassword":true,改回连接里填明文密码(仅限内网) - 用 Windows 任务计划程序新建任务,务必勾选「不管用户是否登录都要运行」和「使用最高权限运行」,否则静默失败
跨库同步不是开关一按就完事的操作,而是由连接稳定性、类型映射准确性、序列状态、字符集上下文共同决定的结果。最容易被忽略的,其实是那句“先手动建好目标表”——跳过这步,后面所有自动化的努力都会在 INSERT 第一行就中断。


















