右键对象直接选“生成DDL”是高效获取DDL的通用方法,适用于表、视图、索引等多数对象;若菜单缺失,多因驱动不支持或权限不足;批量生成需注意跨库语法差异;导出整库DDL时GUI易错序,推荐用pg_dump或mysqldump等命令行工具保障依赖顺序。

右键表/视图/索引等对象直接选“生成DDL”
绝大多数情况下,你不需要双击打开对象再点属性页——直接在数据库导航树里右键目标对象(比如 users 表、idx_order_status 索引、vw_active_orders 视图),菜单里就有 生成DDL 选项。这个操作是通用的,适用于表、视图、函数、存储过程、序列、约束、甚至自定义类型(取决于数据库驱动支持程度)。
注意:如果右键菜单没出现 生成DDL,说明当前连接使用的驱动不支持该对象类型的 DDL 反向生成,或者权限不足(例如对系统视图或某些 PostgreSQL 扩展对象)。这时可尝试切换为更高权限账号重连。
多选批量生成DDL时要注意兼容性差异
按住 Ctrl 或 Shift 多选多个表后右键 → 生成DDL,DBeaver 会把所有对象的 DDL 合并在一个弹窗里。但这里有个关键细节:不同数据库生成的 DDL 格式不一致:
- MySQL 生成的语句默认带
IF NOT EXISTS和字符集声明(如CHARSET=utf8mb4) - PostgreSQL 通常包含
CREATE OR REPLACE视图语法,但不会自动加SCHEMA前缀,需手动补全 - SQL Server 可能输出
GO分隔符,复制到其他工具执行前得确认是否兼容 - Oracle 的 DDL 默认不含
SEGMENT CREATION IMMEDIATE等存储子句,实际建表可能行为不同
所以批量导出后别直接运行,先检查目标环境是否支持这些语法扩展。
查看 DDL 时遇到“DDL not available”怎么办
常见报错是弹窗显示 DDL not available 或空白内容,原因通常是:
- 对象属于系统 schema(如 PostgreSQL 的
pg_catalog、SQL Server 的sys),DBeaver 默认屏蔽其 DDL 以避免误操作 - 数据库版本太老(如 MySQL 5.6 以下),服务端未暴露
SHOW CREATE接口 - 连接参数里禁用了元数据查询,比如 PostgreSQL 连接串中加了
includeAllObjects=false - 用户缺少
SELECT权限(某些数据库要求对information_schema或系统表有读权限才能反推 DDL)
临时解法:换用原生命令行验证,比如 MySQL 连上后执行 SHOW CREATE TABLE users;,如果命令行能返回,说明是 DBeaver 配置问题而非权限或版本问题。
导出整个 Schema 的 DDL 要避开“依赖顺序”陷阱
右键数据库 → 导出 → 选 SQL 文件 → 勾选 仅 DDL,看似简单,但导出结果里的对象顺序往往不符合依赖关系。比如外键约束可能排在被引用表之前,导致导入失败。
应对方式只有两个:
- 导出后手动调整顺序:把
CREATE TABLE放最前,ALTER TABLE ... ADD CONSTRAINT放最后 - 改用命令行工具兜底:PostgreSQL 用
pg_dump -s -n public mydb > schema.sql,MySQL 用mysqldump --no-data --skip-triggers mydb > schema.sql,它们天然保证依赖顺序
DBeaver 的图形化导出适合快速看结构,真要迁移或重建,还是得信命令行输出的 DDL —— 尤其涉及外键、函数依赖、分区定义时,GUI 工具容易漏掉隐式依赖。











