勾选“Transfer auto-generated columns”可使DBeaver在导入时传输数据库自动生成列(如AUTO_INCREMENT、SERIAL、GENERATED ALWAYS AS IDENTITY)的值;不勾选则跳过,由数据库按规则自动生成新值,更安全常用。

导入数据时主键没生成,不是 DBeaver 漏了功能,而是默认跳过自增列 —— 你得手动告诉它“要传这些列”。
Transfer auto-generated columns 勾不勾?
这个选项控制的是:导入过程中,是否把目标表里由数据库自动生成的列(比如 AUTO_INCREMENT、SERIAL、GENERATED ALWAYS AS IDENTITY)也当作普通字段参与插入/更新。
- 勾选 → DBeaver 会尝试把源数据里的对应值写入这些列(可能失败,取决于数据库是否允许显式插入)
- 不勾选 → 这些列被完全忽略,由数据库按规则自动生成新值(最安全、最常用)
- 常见错误现象:
ERROR: null value in column "id" violates not-null constraint,说明你没勾但目标列又没默认值或序列支持
MySQL 导入时 id 不自增?检查建表语句
DBeaver 不会帮你“补”自增逻辑,它只执行你写的或它生成的 SQL。如果你的表没定义 AUTO_INCREMENT,导入时自然不会生成 id。
- 建表必须含
INT NOT NULL AUTO_INCREMENT PRIMARY KEY或类似结构 - 如果表已存在但没自增,不能靠导入设置修复,得先
ALTER TABLE xxx MODIFY COLUMN id INT AUTO_INCREMENT - 导入前用
SHOW CREATE TABLE xxx确认实际定义,别信 DBeaver 表结构视图里“Auto increment”那个小勾(它只是 UI 提示,不保证生效)
PostgreSQL / DB2 导入时主键不生成?重点看序列绑定
PostgreSQL 没有 AUTO_INCREMENT,靠 SERIAL 或显式序列 + 默认值;DB2 靠 GENERATED ALWAYS AS IDENTITY。DBeaver 导入时若跳过这些列,又没配好默认值,就会报错。
- PostgreSQL 推荐建表用
ID SERIAL PRIMARY KEY,这样插入时不传id就自动调nextval() - DB2 必须确保列定义含
GENERATED ALWAYS AS IDENTITY,且导入时勾选Transfer auto-generated columns才可能复用原值;如需新生成,就别勾,让数据库自己算 - 容易踩的坑:手动建了序列但忘了设列为
DEFAULT nextval('seq_name'),导入时该列仍是 NULL
导出 SQL 再导入时丢了主键?通用设置别漏
用 DBeaver 导出为 SQL 文件再导入,常出现主键列被省略 —— 因为导出默认不包含数据库生成列。
- 导出时,在「导出向导」→「通用」页,务必勾选
Include generated columns - 否则导出的 INSERT 语句里不含
id字段,导入到新库时若新表没自增定义,就直接报错 - 这个设置和导入时的
Transfer auto-generated columns是两回事:前者决定“导出脚本里写不写那列”,后者决定“导入时写不写进数据库”
最易被忽略的一点:不同数据库对“自增列能否显式插入”的策略完全不同。MySQL 默认允许(除非开了 sql_mode=NO_AUTO_VALUE_ON_ZERO),PostgreSQL 默认禁止(除非用 INSERT ... OVERRIDING SYSTEM VALUE),DB2 则严格区分 ALWAYS 和 BY DEFAULT。别假设一个配置在所有库都管用。

















