Navicat 不保存跨库迁移历史记录,仅支持将当前配置保存为可复用的 .ndt 文件;真正执行日志需依赖外部数据库日志与手动对比,且类型映射隐患需人工校验。
Navicat 没有内置跨库迁移历史记录功能
navicat 本身不保存、也不提供界面查看「跨异构数据库(比如 mysql → postgresql)的迁移任务执行历史」。它不会像数据库审计日志那样记录谁在什么时候迁移了哪张表、字段是否被重命名、类型怎么转换。所谓“迁移历史”,实际是用户自己操作的副产品,不是 navicat 主动维护的状态。
这意味着:你点过多少次 Tools → Data Transfer,选过哪些表、勾没勾 Truncate target table,Navicat 都不会存下来供事后回溯。
能查到的只有最近一次迁移的配置快照
Navicat 在关闭迁移窗口前,会把当前设置临时缓存在内存里;如果意外崩溃或非正常退出,这部分配置大概率丢失。但只要你没关掉那个迁移窗口,点击右上角 Save As,就能把这次的源库、目标库、表映射、字段转换规则等存成一个 .ndt 文件——这是唯一可复用、可对比的“历史痕迹”。
-
.ndt文件本质是 XML,可用文本编辑器打开,搜索<source_db></source_db>或<column_mapping></column_mapping>查看具体转换逻辑 - 不同版本 Navicat 生成的
.ndt格式可能不兼容,比如 Navicat 16 导出的文件,Navicat 15 打不开 - 它不记录执行时间、行数、错误详情——只记“你想怎么做”,不记“实际做了什么”
真正要追踪变更,得靠外部日志 + 数据库自身能力
如果你需要知道“上次迁移后,PostgreSQL 里的 users 表比 MySQL 少了 is_vip 字段”,靠 Navicat 界面是找不到答案的。必须组合使用:
- 手动开启 Navicat 的
Log窗口(菜单栏View → Log),迁移时保持开启——它会输出每条 INSERT/CREATE 的 SQL 和报错,但仅限当前会话,关掉就清空 - 在目标库(如 PostgreSQL)启用
log_statement = 'all'或至少'ddl',配合log_directory查看真实执行了哪些 DDL/DML - 对关键表,在迁移前后分别导出结构:
pg_dump -s -t users和mysqldump -d -t --no-create-info mysql_db users,用diff对比
容易被忽略的兼容性断层点
跨库迁移最常翻车的地方,根本不在 Navicat 界面里,而在类型映射和默认行为差异上。例如:
- MySQL 的
TINYINT(1)默认被 Navicat 当作布尔映射到 PostgreSQL 的BOOLEAN,但如果原数据含 2、-1 这类值,就会插入失败且日志只显示ERROR: invalid input syntax for type boolean - SQL Server 的
DATETIME2(7)迁移到 MySQL 8.0+ 时,Navicat 默认用DATETIME(6),微秒精度被截断,但无警告 - Oracle 的
NUMBER(10,0)可能被映射为 PostgreSQL 的BIGINT,但如果原值超过 9223372036854775807,插入就溢出,而 Navicat 不校验数值范围
这些坑不会出现在“历史记录”里,也不会进日志,只有比对目标库实际数据时才会暴露。留一手:迁移后跑个 SELECT COUNT(*) FROM source_table 和 SELECT COUNT(*) FROM target_table 是最朴素也最有效的兜底动作。










