用途
db-seed 用于生成数据库种子脚本,向数据库填充真实、符合业务领域的示例数据。它读取项目中的 schema 定义,产出可直接运行的种子文件,适合开发、演示和测试场景。
主要能力
Schema 发现:扫描项目中的 schema 定义,支持 Drizzle schema(src/db/schema.ts、src/schema/.ts、db/schema.ts)、D1 迁移(drizzle/.sql、migrations/.sql)、原始 SQL(schema.sql、db/.sql)以及 Prisma(prisma/schema.prisma)。读取后会建立表、列、数据类型与约束(NOT NULL、UNIQUE、DEFAULT)、外键关系以及以 TEXT 存储的 JSON 字段的模型。
种子参数配置:可设置用途(dev、demo、testing,默认 dev)、数据量(small 每表 5-10 行、medium 20-50 行、large 100+ 行,默认 small)、领域上下文(如电商、SaaS、博客,默认从 schema 推断)和输出格式(TypeScript/Drizzle、原始 SQL 或两者,默认匹配项目 ORM)。用途影响数据质量:dev 数据多样并含边界情况;demo 数据精致适合截图和演示;testing 数据系统覆盖边界条件、重复值和特殊字符。
插入顺序规划:根据外键构建依赖图,先插入父表再插入子表。例如博客 schema 的顺序为 users、categories、posts、comments、tags、post_tags。遇到循环依赖时,使用可空外键并分两趟插入(先插入 NULL,再 UPDATE)。
真实数据生成:不使用 "test123"、"foo@bar.com" 或 "Lorem ipsum" 等通用占位符。姓名使用硬编码的常见姓名列表并混合性别与文化背景;邮箱从姓名派生并使用 example.com 域名(RFC 2606 保留);日期在合理范围内生成并使用 ISO 8601 格式;ID 使用 crypto.randomUUID() 或自增整数;价格使用真实区间;描述内容为每种类型写 3-5 个真实变体循环使用。支持通过种子化 PRNG 实现确定性数据(相同种子产生相同数据)。
输出格式:TypeScript 输出使用 Drizzle ORM,包含清空数据、分批插入(D1 每批 10 行)和日志计数;原始 SQL 输出可直接通过 wrangler d1 execute 运行。
幂等性:种子脚本可安全重复运行。提供删除后插入(简单,会丢失数据)和 upsert(保留非种子数据)两种方式,默认 dev/testing 用前者,demo 用后者。
D1 特殊处理:处理每次 INSERT 最多约 10 行、无原生 BOOLEAN(用 INTEGER 0/1)、无原生 DATETIME(用 TEXT 存 ISO 8601)、JSON 以 TEXT 存储需 JSON.stringify()、外键始终强制、绑定参数上限 100 等问题。
使用方式
TypeScript 种子脚本通过 npx tsx scripts/seed.ts 运行;Cloudflare Workers 可添加种子端点(生产前移除)。原始 SQL 通过 npx wrangler d1 execute DB_NAME --local --file=./scripts/seed.sql 运行。运行命令会以注释形式写在文件顶部。
适用场景
适用于需要为开发、演示或测试环境快速填充真实示例数据的项目,尤其是使用 Drizzle、D1、Prisma 或原始 SQL 的数据库。
限制
资料未提供该技能的安装方式、收费模式、平台支持范围或具体效果数据。