应以SELECT COUNT(*) FROM your_table;结果为准,因DBeaver导入非原子操作,任务页“已处理”“已插入”“错误”三数之和才等于文件总行数,且需排查分隔符、空值处理、重复行忽略、事务提交及隐藏字符等问题。

导入完成后直接比行数,大概率会错——因为 DBeaver 的导入不是原子操作,失败行会被跳过但不中断任务,最终“成功导入”数 ≠ 文件总行数 ≠ 目标表当前行数。
导入任务结果页的“已处理”和“已插入”不一致怎么办
这是最常被误读的数据。DBeaver 在任务结果页显示三组数字:已处理(文件解析出的总行数)、已插入(成功写入数据库的行数)、错误(解析或写入失败的行数)。三者之和应等于文件总行数(不含标题行)。
-
已处理≠ 文件行数?说明分隔符、编码或引号设置错了,文件没被完整切开 -
已插入<已处理-错误?说明有行被静默丢弃了,比如目标列设了NOT NULL但源数据为空,且你没勾选“插入空值”或“使用默认值” - 错误数为 0 但
已插入明显偏少?检查是否启用了“忽略重复行”,主键/唯一约束冲突的行不会报错,只计为“跳过”
用 SQL 直接查目标表 COUNT(*) 最可靠
别信向导页的摘要,执行一句 SELECT COUNT(*) FROM your_table; 才是真实入库量。注意两点:
- 如果导入时勾了“截断目标表”,那这个数就是本次导入量;没勾的话,得先查导入前的行数做减法
- PostgreSQL/Oracle 等需要显式
COMMIT的数据库,确认事务已提交——DBeaver 默认开启自动提交,但如果在“加载设置”里关了,得手动点“提交”按钮
文件行数和数据库行数对不上,优先查这三处
差异超过几行就该停下手来排查,而不是反复重跑。按顺序看:
- CSV 文件本身有没有隐藏的空行、BOM 头、跨行字段(比如地址字段含换行符但没加引号)?用
head -n 20 your_file.csv | cat -A查看不可见字符 - 导入向导里是否勾了“首行作为列名”?如果文件没标题行却勾了,第一行数据就被当列名丢了
- 目标表是否有触发器、自增主键、默认值或生成列?这些可能让
INSERT实际写入的行和源数据不一一对应
真正耗时间的从来不是导入动作本身,而是搞清“哪几行没进去、为什么没进去”。每次导入后花 30 秒执行 COUNT(*),再扫一眼任务结果页的三组数字,能省下后面半小时翻日志的时间。











