DBeaver 数据字典生成完整指南:从单表结构导出到数据库文档 CI 自动更新
【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver
DBeaver 内置的数据导出能力,可以把表结构、索引、外键信息直接变成一份数据字典文档,输出支持 Markdown、HTML、JSON 等格式。配合 CLI 批量命令,数据库文档生成不再靠手工整理,可以挂到 CI 里定时自动更新。
相比手写文档,DBeaver 导出表结构强在哪
手写文档最大的问题不是不想写,而是写完就过期。一次ALTER TABLE之后,文档里的备注就可能和库里对不上。DBeaver 导出是直接读连接库的元数据,文档和结构天然同版本,结构变更后重新跑一遍命令就能同步。
效率差异可以浓缩成三行:
| 对比项 | 手工整理 | DBeaver 导出 |
|---|---|---|
| 单表更新耗时 | 十几分钟逐个核对 | 秒级 |
| 覆盖范围 | 想到什么写什么 | 表、索引、外键一次拿全 |
| 结构变更后成本 | 回头翻文档人工改 | 重跑一次导出命令 |
导出功能主要实现在 数据转换模块里,想深入看细节可以从这里入手。
数据字典导出格式怎么选 📋
格式不用贪多,按文档给谁看来决定。要放进项目 README 或提交到仓库,选 Markdown 做数据字典导出,纯文本、能 diff、版本友好。要给非技术同事或写交付文档,选 HTML,直接有版式,浏览器打开就是成品。程序要解析的,比如二次生成 API 文档,选 JSON,字段结构清晰。
CSV 适合丢进 Excel 做简单统计,XML 适合对接已定型的配置系统,按需取用即可。
单表结构导出步骤:从一张表到整个库
先说单表。假设库里有这么一张表:
-- 订单流水表,作为导出示例 CREATE TABLE order_log ( order_id BIGINT PRIMARY KEY AUTO_INCREMENT, -- 订单主键 order_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 下单时间 pay_amount DECIMAL(10,2) NOT NULL, -- 实付金额 pay_channel VARCHAR(20) NOT NULL, -- 支付渠道 order_status TINYINT NOT NULL DEFAULT 0, -- 0待付/1已付/2取消 ip_addr VARCHAR(45) NULL -- 客户端IP ) COMMENT = '订单流水表';在 DBeaver 连接树里展开库节点,右键order_log,选择导出,选中文档类型和目标目录即可。拿到的结果是一张结构清晰的表格:
| 字段名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
| order_id | BIGINT | 是 | AUTO_INCREMENT | 订单主键 |
| order_time | DATETIME | 是 | CURRENT_TIMESTAMP | 下单时间 |
| pay_amount | DECIMAL(10,2) | 是 | 实付金额 | |
| pay_channel | VARCHAR(20) | 是 | 微信/支付宝/余额 | |
| order_status | TINYINT | 是 | 0 | 0待付/1已付/2取消 |
| ip_addr | VARCHAR(45) | 否 | 客户端IP |
整库导出时,把导出对象从表换成数据库节点,勾上索引、外键、视图等选项,输出会按表分文件,再带一份关系汇总文档,一整个库的数据字典一次成型。
DBeaver CLI 批量导出与 GitHub Actions 集成
GUI 里手动点没问题,但要每天同步就得用无头模式。启动脚本支持控制台参数,连接信息和导出指令可以一次给齐:
./dbeaver/dbeaver -console \ -url "jdbc:mysql://prod-db:3306/shopdb" \ -user "$DB_USER" -password "$DB_PASSWORD" \ # 连接信息,建议走环境变量 -command "export-database \ # 批量导出指令 --format markdown --output docs/db \ # 输出格式与目录 --include-tables --include-views" # 范围:表和视图放进 CI,推送就自动跑,这也是 DBeaver CI 集成最常见的形态:
name: 生成数据库文档 on: push: branches: [main] jobs: db-docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: 运行 DBeaver 导出 run: ./ci/export-db.sh # 包装脚本,内部调用上面的 -console 命令 - name: 发布文档 run: git add docs/db && git commit -m "auto: database docs $(date)" && git push整条链路长这样,失败分支必须兜住:
无头模式的实现在 headless 插件里,参数行为不符合预期时从这里查。
生产环境导出容易踩的坑 ⚠️
中文乱码是第一个坑。某些系统上 JVM 默认字符集不是 UTF-8,导出的中文备注会变成方块。启动参数加-Dfile.encoding=UTF-8,输出文件显式指定编码,基本就能解决。
大库导出耗时是第二个。几千万行没关系,元数据不怕行数,但表数量上万时全量采集就是分钟起步,业务高峰跑还容易被当成占资源。用 schema 白名单圈定范围,或者错峰跑增量导出,结果先落到临时目录,确认无误再替换旧文档。
多环境文档版本管理是第三个。开发、测试、生产三套结构经常不一致,文档混放一个目录,后面没人敢信哪份是真的。输出目录按环境拆开,比如docs/db-dev/、docs/db-prod/,文档头部写清对应环境和导出时间,能省掉不少扯皮。
跑通之后还能做什么
链路跑起来之后,下一步通常是内容增强:用 AI 给字段备注做自动补全,或者基于外键和视图生成数据血缘图,让人不光知道"有哪些字段",还知道"数据流向哪里"。仓库里的 model.ai 模块已经在这个方向上积累,值得留意。
【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考