主键冲突时导入中断,是因默认策略为“终止”,需在“设置”页展开“Error handling”,勾选“Continue on error”并显式将“Replace method”设为“Ignore”才生效。

导入时主键重复直接中断,不是因为 DBeaver 不支持忽略,而是默认策略设成了“终止”。只要在向导里改一个选项,就能让冲突行跳过、其余继续执行。
导入向导里哪一页配“忽略主键冲突”
关键设置不在“列映射”或“预览”页,而在最后一步之前的 设置 页(部分版本叫 Transfer Settings 或 Execution Settings)。这里有个折叠区域叫“Error handling”,必须手动展开才能看到。
- 勾选
Continue on error(遇到错误时继续)——这是总开关,不勾就不可能跳过任何冲突 - 在下方的
Replace method下拉菜单中,选Ignore(不是None,也不是Replace) - 如果没看到
Replace method,说明你还没在上一步指定目标表——必须先完成列映射并确认目标表存在,该选项才会激活
为什么选了 Ignore 还是报错中断
常见原因是混淆了两个独立开关:一个是全局错误响应(Continue on error),另一个是具体冲突类型策略(Replace method)。DBeaver 默认对主键冲突的行为是 Terminate,哪怕你开了“继续”,它仍会按该类型默认策略执行。
-
Continue on error只控制“是否中断流程”,不改变每类错误的处理动作 - 主键冲突属于
Primary key violation类型,它的动作必须显式设为Ignore才真正跳过 - 检查错误日志里报的错误类型是不是
SQLState: 23000或含duplicate key字样,确认确实是主键冲突而非外键或类型转换问题
Ignore 和 Truncate 前清空的区别在哪
选 Ignore 是逐行判断:遇到已有主键值就跳过这行,其余全量插入;而勾选 Truncate target table(s) before load 是先清空整张表,再无条件插入全部数据。两者目的不同,不能互相替代。
- 做增量更新、只补新数据 → 用
Ignore - 做全量覆盖、确保表状态和文件完全一致 → 勾
Truncate,且Replace method可设为None(避免多余判断开销) - 同时勾选
Truncate和Ignore没意义:表都空了,自然没有主键可冲突
导入后怎么确认 Ignore 真生效了
不能只看“成功”提示,要查结果页的统计数字和错误日志。
- 结果面板里找
Skipped rows或Conflicts ignored计数,非零才说明有行被跳过 - 点击
View error log,过滤出duplicate关键字,确认每条都是SKIPPED状态,不是FAILED - 抽样查几条本该冲突的记录,确认目标表中对应主键的旧数据确实没被覆盖、也没新增
最容易被忽略的是:第一次跑就该用 Ignore 摸底——看冲突规模有多大,再决定后续用 Replace 覆盖,还是改源数据。硬刚默认 Terminate 策略,只会反复卡在同一个地方。

















