右键表选“生成 DDL”是最直接的建表语句导出方式:在DBeaver中右键单表→「生成SQL」→「DDL」,弹窗即显示完整CREATE TABLE语句,含字段、类型、主键及注释(若启用Show comments),复制即可用;误选「导出数据」会生成INSERT而非DDL。

右键表选“生成 DDL”是最直接的建表语句导出方式
想快速拿到单张表的 CREATE TABLE 语句,不用进导出向导,直接在数据库导航器里右键该表 → 选择「生成 SQL」→「DDL」。弹出窗口里默认就是完整建表语句,含字段、类型、主键、注释(如果勾了 Show comments),复制粘贴即可用。
常见错误是右键后误点「导出数据」或「导出」,结果生成的是 INSERT 脚本或 CSV,完全不是建表语句。注意菜单项名称差异:生成 SQL ≠ 导出。
多张表要导出?可以按住 Ctrl 或 Shift 多选表,再统一右键 →「生成 SQL」→「DDL」——DBeaver 会把所有选中表的 DDL 合并在一个编辑器窗口里,但不会自动加 USE database 或 SET search_path,需手动补。
导出整个 Schema 的 DDL 必须右键 Schema 或数据库节点
如果目标是导出某个 schema 下全部表、视图、索引、约束的 DDL,不能一张张表去点。正确做法是:在左侧导航器中,右键对应的 schema(如 public)或整个 database 节点 →「导出」→ 格式选「SQL 文件」→ 在后续页面中务必勾选 Only DDL(有些版本叫 Export DDL only)。
容易漏的关键配置:
-
Include constraints:不勾则外键、CHECK、UNIQUE 全丢 -
Include indexes:不勾则索引语句不会生成 -
Generate DROP statements:需要重建时才建议开启,否则导入可能报错 -
Use IF NOT EXISTS:MySQL/PostgreSQL 用户强烈建议勾上,避免重复建表失败
导出后文件里不会有 COMMIT 或事务控制语句,纯 DDL,可直接用 psql -f 或 mysql -e 执行。
“Export Database”向导默认不导 DDL,必须手动切换模式
很多人点数据库节点右键 →「Export Database」,以为这是“全量备份”,结果导出的 SQL 里只有空表结构、没数据、没约束、甚至没有 CREATE TABLE——因为这个向导默认走的是「结构 + 数据」混合路径,且初始页不显式提示格式类型。
真正要它导 DDL,得在第一步就选择 Export format = SQL,然后在第二步「Data transfer settings」里取消勾选 Export data,再进「Advanced」选项卡确认 Only DDL 已启用。否则它会按“带数据迁移”逻辑跑,生成一堆 INSERT 却忽略建表语句。
另一个坑:某些数据库(如 DB2、Oracle)的系统表会被跳过,不报错也不提示,导致导出的 DDL 缺少序列、别名等对象。建议导出后 grep 一下 CREATE SEQUENCE 或 CREATE SYNONYM 确认是否齐全。
编码和兼容性细节决定能否顺利导入
导出的 SQL 文件如果在目标库执行时报乱码或语法错误,大概率是这三个地方没设对:
-
File encoding必须设为UTF-8,且勾选Write BOM(尤其 Windows 下用记事本打开过的文件,没 BOM 极易变乱码) - PostgreSQL 用户要勾选
Use SET CONSTRAINTS DEFERRED,否则外键依赖顺序不对,INSERT会失败 - MySQL 用户记得开
Reset AUTO_INCREMENT,否则导入后自增 ID 从 0 开始冲突
最后提醒一句:DBeaver 导出的 DDL 是“逻辑定义”,不包含物理存储参数(如 MySQL 的 ROW_FORMAT、PostgreSQL 的 fillfactor)。如果生产环境对这些有强依赖,得额外从 information_schema 或原生命令(如 pg_dump -s、db2look -d db -e)补全。











