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)、numeric、jsonb…)或生成器种类(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/false;mysql/sqlite输出1/0;保留字或特殊标识符 自动加引号(mysql 用反引号,其余用双引号)。未知方言回落并写入notes。 - 边界:
rows缺省取default_rows,并钳制到 1..500;失败不抛异常,返回ok: false+error说明原因(如no CREATE TABLE statement found);所有自动修正都记入notes。 - 复现:输出里回传生效的
seed/dialect,原样重放即可得到相同结果。
配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
seed_dialect | string | 'postgres' | 调用未显式指定 dialect 时使用的 SQL 方言 |
default_rows | number | 10 | 调用未显式指定 rows 时生成的行数 |
default_seed | number | 42 | 调用未显式指定 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.schema 与 output.render)。
本插件运行时不依赖任何外部服务或数据库(纯文本进、SQL 出);同类涉及网络/命令行的插件应通过配置
注入 fetchFn / runCommand 之类的出口,且单元测试始终注入假实现,全程离线。
License
MIT