DBeaver跨库迁移踩坑实录:MySQL→PostgreSQL的7步数据一致性保障方案
1. 这不是一次简单的“导出再导入”——MySQL→PostgreSQL迁移中,AI工具差点让我丢了生产库的权限
我接手这个迁移任务时,团队刚用 DBeaver 完成了一次 MySQL 到 PostgreSQL 的“快速切换”:选中表 → 右键 → “Export Data” → 选 PostgreSQL JDBC 驱动 → 点击执行。三分钟搞定,数据看着也对。上线后第三天,财务报表里某张核心订单表的created_at字段批量变成了1970-01-01 00:00:00+00。排查发现,MySQL 中DATETIME类型字段在导出为 SQL 插入语句时,被 DBeaver 默认转成了带毫秒精度的字符串(如'2023-05-12 14:23:45.123'),而目标 PostgreSQL 实例的timestamp without time zone字段无法解析.123这部分, silently 截断为'2023-05-12 14:23:45'——但问题不在这里。真正致命的是,DBeaver 在生成 INSERT 语句时,把所有NULL值都显式写成了'NULL'字符串字面量,而不是 SQL 标准的NULL关键字。PostgreSQL 把'NULL'当作普通字符串插入了text字段,而 MySQL 把它当作了真正的空值。
这个 Bug 不是 DBeave
