DBeaver不支持一键导出差异数据,需先通过Compare功能定位差异,再过滤并导出结果集;其比对为UI层内存快照,无原生SQL生成能力,导出依赖手动过滤和Export resultset操作。

直接导出“两个库的差异数据”在 DBeaver 中没有一键按钮——它不提供类似 diff --export 的原生功能。你真正能做的是:先用 Compare 功能定位差异,再手动或半自动提取差异行。核心路径是「比较 → 过滤 → 复制/导出结果集」。
为什么不能直接“导出差异数据”
DBeaver 的 Compare 功能本质是 UI 层的可视化比对工具,底层调用的是 Simple Compare Plugin,它只生成内存中的差异快照,并不构造可执行的 SQL 或可导出的数据流。所谓“导出差异”,其实是把比对结果视图里的记录(比如“新增”“修改”行)当成普通查询结果来处理。
常见错误现象:No differences found 却明显有结构变更——这往往不是没差异,而是元数据未正确加载或 Schema mapping 没配,导致比对根本没跑起来。
- 对比前必须确保两个连接都已成功打开,且目标库用户有
SELECT权限(否则字段值无法读取,只能比结构) -
Compare scope若只选Selected objects,则只会比你右键选中的那几张表;想覆盖整个库,得选All objects - PostgreSQL/Oracle 等多 schema 数据库,必须在对比对话框中手动添加
source_schema → target_schema映射,否则跳过所有对象
如何从比较结果里提取“差异行”
完成比较后,DBeaver 会打开一个三栏式结果页(源 / 目标 / 差异)。这里的“差异行”是只读表格,但支持复制粘贴和右键导出:
- 点击顶部工具栏的漏斗图标(
Filter),勾选你要的差异类型:Added、Modified、Deleted - 若只想看某几个字段的变更,取消全选字段,只保留如
id、updated_at、status等关键列 - 右键结果表格 →
Export resultset→ 目标选Database,再指定目标表(注意:该表需已存在且字段兼容) - 或者导出为 CSV/Excel:右键 →
Export resultset→ 选File→ 格式选CSV,勾选Include headers
⚠️ 注意:Export resultset 导出的是当前视图里的数据,不是原始表数据——所以过滤必须在导出前做完,且不能依赖“分页加载”,要先点 Load all(底部状态栏提示“X rows loaded”)。
想生成 INSERT/UPDATE/DELETE 脚本?得绕道
DBeaver 不生成差异 SQL 脚本。但你可以用组合操作逼近目标:
- 对
Added行:复制结果 → 粘贴进 SQL 编辑器 → 用正则批量转成INSERT INTO ... VALUES (...) - 对
Modified行:复制两列(如id和新value)→ 在编辑器里用列编辑模式(Alt+鼠标拖选)加前缀UPDATE table SET value = ',再补后缀' WHERE id = - 导出
Deleted行的主键列表 → 手写DELETE FROM table WHERE id IN (1,2,3)
性能影响:如果差异行超过 10 万,DBeaver 的结果视图可能卡顿甚至 OOM。此时应改用命令行工具(如 pg_dump --data-only --table=xxx + diff)或写脚本比对主键哈希。
最易被忽略的一点:DBeaver 的比较结果不包含事务上下文。你看到的“Modified”只是单行字段值不同,无法判断是否属于同一业务逻辑单元(比如订单主表 + 子表同时变更)。真要同步业务数据,别依赖 UI 比较,老实用应用层逻辑或 CDC 工具。











