在 DSH 工作流中,维护数据库结构变更是常见需求。手动编写 ALTER TABLE 或对比两个 DDL 文件容易出错且耗时。dsh-db-migration 旨在自动化这一过程,通过对比两个 SQL DDL 文件来生成迁移脚本。
该插件由 uckkk 维护,是一个纯 Node 实现、无网络依赖的工具。它专注于检测两个 DDL 文件在表结构和列定义上的差异,并输出相应的 ALTER TABLE 或 DROP TABLE 语句。
核心功能¶
该插件主要处理 DDL 层面的变更检测与 SQL 生成:
- DDL 对比与统计:对比旧版/新版 DDL,返回结构差异统计以及生成的迁移 SQL。
- 表级变更:识别新增或删除的表,生成
CREATE TABLE或DROP TABLE语句。 - 列级变更:识别新增或删除的列,生成
ALTER TABLE ADD/DROP COLUMN语句。 - 列类型变更:识别列类型的修改,生成
ALTER TABLE MODIFY COLUMN语句。 - 类型支持:支持常见类型,包括带括号的类型,如
DECIMAL(10,2)、VARCHAR(255)以及ENUM('a','b')。
安装与启用¶
安装该插件需要使用 DeepSeek Harness 的命令行工具。
dsh plugin add github:uckkk/dsh-db-migration
安装完成后,需要在 profile 的 package.json 配置文件中启用该 bundle。在 dsh.profile.bundles 字段中加入:
"dsh-db-migration"
典型用法¶
安装成功后,可以在会话中调用该插件注册的工具。核心工具为 diff_schema。
示例:对比 schema_v1.sql 和 schema_v2.sql,将生成的迁移 SQL 输出到 migrations/20260816_up.sql。
diff_schema(oldFile="schema_v1.sql", newFile="schema_v2.sql", outFile="migrations/20260816_up.sql")
适用场景与注意¶
适用场景:适用于需要快速生成数据库结构迁移脚本的场景,特别是当需要对比两个版本的 DDL 文件并找出差异时。
注意范围:
* 该插件覆盖常见 CREATE TABLE 语法(MySQL/PostgreSQL/SQLite 基础列定义)。
* 不处理外键、索引、复合主键、复杂默认值或触发器。
* 生成的迁移 SQL 仅作为起点,涉及线上数据时请务必人工复核后再执行。
* 安装即在本机运行第三方代码,请自行审阅源码与许可证(MIT)。