DBeaver勾选“Show comments”未生效,主因是数据库类型限制(MySQL仅表级、SQL Server需手动查系统视图)、用户权限不足(如Oracle缺SELECT_CATALOG_ROLE)、或误用于数据库级导出(该场景不支持字段注释)。

导出 DDL 时“Show comments” 勾了但没生效?先确认数据库类型和权限
Oracle/PostgreSQL 支持字段级注释导出,MySQL(5.7+)仅支持表级 COMMENT,且需显式启用;SQL Server 的列注释依赖 sys.extended_properties,DBeaver 默认不读取。如果勾选了 Show comments 却没看到 COMMENT ON COLUMN 或字段后的 -- 注释,大概率是当前连接用户缺少查询系统视图的权限,比如 Oracle 下无 SELECT_CATALOG_ROLE,或 PostgreSQL 下对 pg_description 无读权限。
验证方式:在 SQL 编辑器中直接执行 SELECT * FROM pg_description;(PG)或 SELECT * FROM user_col_comments;(Oracle),看是否报错或返回空结果。
右键 → Generate DDL → Show comments 不起作用的常见原因
DBeaver 的 Show comments 开关只影响“单表生成 DDL”流程,对“数据库级导出”(Export Database)完全无效。也就是说:
- 对单个表右键 →
Generate DDL→ 勾选Show comments:Oracle/PG 可能输出COMMENT ON COLUMN ...语句,MySQL 仅加表级COMMENT 'xxx' - 对整个数据库右键 →
Export→ 勾选Include comments:该选项实际只控制表级注释(CREATE TABLE ... COMMENT='xxx'),**不会生成任何字段注释语句** - 即使数据库支持列注释,DBeaver 当前(24.3.x 及之前)仍未将字段注释整合进批量导出的 DDL 流程中
手动补注释最稳的方式:用 user_col_comments 拼 SQL
适用于 Oracle、PG(需适配视图名)、SQL Server(查 sys.extended_properties)。核心逻辑是:查出字段注释,再拼成独立的 COMMENT ON COLUMN 语句追加到 DDL 后面。
Oracle 示例(替换 'MY_TABLE' 和 'MY_SCHEMA'):
SELECT 'COMMENT ON COLUMN ' || owner || '.' || table_name || '.' || column_name || ' IS ''' || comments || ''';' FROM user_col_comments WHERE table_name = 'MY_TABLE' AND owner = 'MY_SCHEMA' ORDER BY column_id;
执行后复制结果,粘贴到你已导出的 DDL 文件末尾即可。注意:comments 中若含单引号,需手动转义为两个单引号(''),否则导入会报错。
想自动化?别信“插件一键导出”,脚本才是可控解法
目前没有稳定、通用的 DBeaver 插件能自动注入字段注释到 DDL。所谓“高级设置启用注释导出”多为误导——那些选项只控制是否导出表注释或约束,和字段无关。
真正可落地的做法是写一个轻量脚本,输入原始 DDL 文件 + 字段注释查询结果(CSV 或 JSON),按列名匹配并插入注释行。关键点:
- 匹配字段名时用
\b{col_name}\s+\w+正则,避免误匹配(如id匹配到user_id) - Oracle 的
COMMENT ON COLUMN必须在CREATE TABLE之后执行,所以注释语句必须放在 DDL 文件末尾 - PG 的字段注释可用
COMMENT ON COLUMN ...,也可在建表时用COMMENT 'xxx' ON COLUMN ...,后者更紧凑但兼容性略差
字段注释不是装饰,而是数据治理的最小单元。DBeaver 导出时漏掉它,不是配置没调对,而是工具链本身没把它当一等公民对待——这点最容易被忽略。











