关键不是“能不能”,而是默认跳过主键列;DBeaver依据JDBC元数据自动过滤自增列,必须手动勾选“Include identity columns”或使用Advanced Copy并确保结果含主键值,且目标库需配合SET IDENTITY_INSERT ON等策略方可执行。

导出带主键值的 INSERT 语句,关键不是“能不能”,而是默认会跳过主键列——尤其当主键是 IDENTITY(SQL Server)、SERIAL(PostgreSQL)或 AUTO_INCREMENT(MySQL)时,DBeaver 为避免插入冲突,默认屏蔽这些字段。必须手动干预才能保留主键值。
导出前确认主键是否被自动排除
DBeaver 在生成 INSERT 语句时,会对自增/标识列做智能过滤:只要 JDBC 元数据标记该列为 isAutoIncrement() == true,它就不会把该列写进 INSERT INTO ... (col1, col2) VALUES 的字段列表里。这意味着即使你表里主键有明确值(比如从旧库迁移来的数据),导出的 SQL 也会变成 INSERT INTO t (name) VALUES ('a'),丢掉主键。
- 验证方式:右键表 → Generate SQL → INSERT → 粘贴到编辑器看生成结果是否含主键列名
- 常见误判场景:MySQL 中用
INT NOT NULL PRIMARY KEY但没设AUTO_INCREMENT,DBeaver 仍可能误判为自增(取决于驱动版本和 JDBC 返回值) - PostgreSQL 中
GENERATED ALWAYS AS IDENTITY列几乎必被跳过;而普通SERIAL或bigserial字段也大概率被过滤
强制包含主键列的两种实操路径
没有全局开关一键启用,必须按导出动作类型分别处理:
-
对单次查询结果导出:执行完
SELECT *后,在结果集右键 → Advanced Copy → 勾选 Include column names 和 Use INSERT statement,再点 Copy。此时主键列会出现在字段列表中——前提是查询结果里该列有实际值(非NULL)且未被 JDBC 隐藏 - 对整张表导出(Export Data 向导):进入向导第二步(Data Transfer Settings)→ 点击 Format settings → 找到 Columns 标签页 → 勾选 Include identity columns(MySQL/SQL Server 显示为 “Include auto-increment columns”;PostgreSQL 显示为 “Include generated columns”)。这一步漏掉,主键值就永远出不来
MySQL / PostgreSQL / SQL Server 的关键差异点
不同数据库对主键值的写入容忍度不同,导出后能否直接执行,取决于目标库是否允许显式插入自增列:
- MySQL:需在目标库执行
SET SQL_MODE=''或SET SESSION sql_mode = '',否则INSERT INTO t(id, name) VALUES(100, 'x')会报错Incorrect integer value(严格模式下) - PostgreSQL:若主键是
GENERATED BY DEFAULT AS IDENTITY,可直接插入;若是GENERATED ALWAYS,必须加OVERRIDING SYSTEM VALUE,即INSERT INTO t(id, name) OVERRIDING SYSTEM VALUE VALUES(100, 'x') - SQL Server:需在插入前执行
SET IDENTITY_INSERT t ON,插入后再OFF;DBeaver 不会自动加这句,得自己补
容易被忽略的编码与权限陷阱
即使主键值导出来了,也可能因环境不一致导致失败:
- 导出文件编码必须设为
UTF-8,且勾选Write BOM(Windows 记事本识别 UTF-8 的唯一可靠方式),否则中文主键值(如 UUID 字符串)可能乱码 - PostgreSQL 导出时若含序列(
SEQUENCE),DBeaver 默认不导出其当前值(last_value),只导结构;如需恢复后继续自增,得单独执行SELECT setval('seq_name', N) - Oracle 用户注意:
ROWID或UROWID类型主键无法安全导出为字面值,应改用业务主键或禁用该列导出
主键值导出最麻烦的地方不在操作步骤,而在于它牵扯三处隐性状态:JDBC 驱动对列元数据的上报、目标库对显式插入的策略限制、以及导出文件编码与编辑器的兼容性。每换一个数据库类型,就得重新校验这三项,不能复用同一套配置。


















