navicat premium 15(需有效授权)支持postgresql间定时同步,essentials/standard版及navicat for postgresql不支持;关键配置包括忽略不存在表、跳过相同数据记录、禁用外键检查、隐藏进度窗口;命令行调用.ncx文件更稳定;需注意序列、扩展和触发器导致的同步失败。
navicat 可以同步两个 postgresql 数据库,但必须用 navicat premium 15(非 essentials/standard 版),且授权有效;否则「计划」标签页不可见、「添加到计划」按钮灰掉,根本无法配置定时同步。
确认你用的是支持同步的 Navicat 版本和授权
不是所有 Navicat 都能做 PostgreSQL 间同步:
-
Navicat Premium 15✅:支持「数据同步」+「计划」,前提是订阅未过期或永久许可已激活 -
Navicat for PostgreSQL 15❌:只有连接和查询功能,没有「数据同步」入口 -
Navicat Essentials❌:连「数据同步」菜单都不存在
打开 Navicat 后,点「工具」→ 看是否有「数据同步」;再点开同步窗口,看顶部是否有「计划」标签页——没有就别折腾了,换版本或补授权。
PostgreSQL 到 PostgreSQL 同步的关键配置项
两个同构库看似简单,但 PostgreSQL 的序列、OID、权限、扩展依赖容易出错。重点调这几个选项:
- 在「选项」页勾选「忽略不存在的表」:避免目标库缺某张表时整个同步中断
- 勾选「跳过具有相同数据的记录」:靠主键或唯一约束比对,减少无谓写入
- 取消勾选「启用外键检查」:PostgreSQL 默认不强制外键延迟检查,开启反而可能报
insert or update on table "xxx" violates foreign key constraint - 「高级」里务必勾选「隐藏进度窗口」:否则命令行调用时弹 GUI 窗口,Windows 任务计划会卡死
字符集不用操心(都是 UTF8),但注意源库和目标库的 search_path 是否一致,否则函数或自定义类型引用可能失败。
用命令行触发 .ncx 同步任务(绕过 GUI 限制)
即使有 Premium 授权,「计划」模块有时也因系统策略或用户会话问题失效。更稳的方式是保存为 .ncx 文件 + 命令行调用:
- 先在图形界面建好同步任务 → 点「保存」生成
pg_to_pg_sync.ncx - Windows 下用管理员权限执行:
navicat.exe --sync "C:\Tasks\pg_to_pg_sync.ncx" - macOS 下终端执行:
/Applications/Navicat\ Premium.app/Contents/MacOS/navicat --sync "/Users/me/Tasks/pg_to_pg_sync.ncx" - 加日志重定向防丢错误:
navicat.exe --sync task.ncx >> sync.log 2>&1
注意路径含空格必须加英文双引号;.ncx 文件不能手写或改后缀,必须由 Navicat 图形界面导出。
同步失败时最常被忽略的三个 PostgreSQL 特性
报错不一定是连接或权限问题,大概率栽在这三处:
-
serial字段在目标库没自动创建关联序列:手动运行CREATE SEQUENCE IF NOT EXISTS xxx_id_seq并绑定到列 - 源库用了
citext或uuid-ossp扩展,但目标库没启用:CREATE EXTENSION IF NOT EXISTS citext - 目标表有
ON INSERT DO INSTEAD触发器,会拦截 Navicat 的 INSERT 语句,导致“0 行同步成功”却无报错
建议首次同步前,在目标库手动执行一次 SELECT * FROM pg_extension; 和 \dT+,比对两边扩展与自定义类型是否一致。











