dsh-db-seed

September 13, 2026 · View on GitHub

确定性播种式 SQL 假数据生成插件(DSH 主机工具插件):把 CREATE TABLE DDL 或列定义文本喂进来, 得到可复现的 INSERT 语句 / 假数据行。纯函数实现——不连接数据库、不读写文件、不联网、不起子进程, 也不读系统时钟;所有随机值都来自由 seed 参数驱动的小型确定性 PRNG(mulberry32), 因此相同参数永远产出逐字节相同的输出,单测完全离线。

工具

工具名说明参数
seed_from_schema解析内联的 CREATE TABLE 语句(只读第一个表),把列映射到生成器类型,输出按方言格式化的 INSERT INTO ... VALUES (...); 语句(每行一条)。PRIMARY KEY / SERIAL / 名为 id 的整数列取序号 1..n,其余随机ddlText: string, rows?: number, seed?: number, dialect?: string
seed_preview不做 SQL,只按显式列清单 {name, type?} 生成行对象数组(预览用)。type 可写 SQL 类型(varchar(50)numericjsonb…)或生成器种类(integer / decimal / boolean / date / time / timestamp / uuid / name / email / phone / city / address / sentence / text / json);省略则按列名推断table: string, columns: array, rows?: number, seed?: number

约定:

  • 类型映射:整数族(int/bigint/serial…)→ 随机整数 1..9999;numeric/float 等 → 两位小数; bool/bit → 布尔;date / timestamp / datetime / time → 2020-2025 的确定性日期时间文本; uuid → v4 形态;json/jsonb → 紧凑 JSON 文本;字符族 → lorem 词组。
  • 列名启发:文本族列(或未知类型)会按列名升级:含 email → 邮箱、phone/tel → 电话、 name → 姓名、city → 城市、address → 地址、title → 句子,等等。
  • 方言postgres 输出 true/falsemysql / sqlite 输出 1/0;保留字或特殊标识符 自动加引号(mysql 用反引号,其余用双引号)。未知方言回落并写入 notes
  • 边界rows 缺省取 default_rows,并钳制到 1..500;失败不抛异常,返回 ok: false + error 说明原因(如 no CREATE TABLE statement found);所有自动修正都记入 notes
  • 复现:输出里回传生效的 seed/dialect,原样重放即可得到相同结果。

配置

配置项类型默认值说明
seed_dialectstring'postgres'调用未显式指定 dialect 时使用的 SQL 方言
default_rowsnumber10调用未显式指定 rows 时生成的行数
default_seednumber42调用未显式指定 seed 时使用的 PRNG 种子

安装

npx -y @deepseek-ai/dsh plugin --profile web add @qingshanjiluo/dsh-db-seed

开发

npm install --no-audit --no-fund
npm run typecheck     # tsc --noEmit
npm run build         # lib/index.js + lib/index.d.ts
npm test              # vitest run
node scripts/load-smoke.mjs   # 校验构建产物的导出面与工具注册

插件遵循 Cordis 函数插件契约:导出 name / inject / Config / apply, 用 defineTool 注册工具(含 output.schemaoutput.render)。

本插件运行时不依赖任何外部服务或数据库(纯文本进、SQL 出);同类涉及网络/命令行的插件应通过配置 注入 fetchFn / runCommand 之类的出口,且单元测试始终注入假实现,全程离线。

License

MIT