数据库种子数据生成
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/database-seeding。
技能介绍
问题在哪
本地联调、集成测试和预发布演练往往需要一个「看起来像真数据」的库,但手写 INSERT 很快会在外键顺序、唯一约束和重复执行上踩坑:跑两次就 duplicate key,子表先于父表插入直接失败,CI 里又因为随机数据不可复现导致用例飘红。生产库更不能拿来随便灌测试行。
技能怎么帮你落地
该技能把 数据库种子填充 当成一条可审查的工作流,而不是一堆零散的 SQL 片段:
- 模式分析:从迁移或 DDL 梳理表、列类型、
NOT NULL/UNIQUE/ 外键,并排出父表先于子表的插入顺序。 - 策略选择:开发用固定随机种子的确定性数据;演示用 Faker 类库;需要分布真实性时用脱敏快照思路——并约定每张表的行数。
- 脚本生成:按项目栈(Python / JS / SQL / Ruby 等)写出满足约束的种子,插入包在事务里;唯一字段用序列或
ON CONFLICT类模式处理。 - 幂等与分环境:支持重复执行(如
INSERT ON CONFLICT DO NOTHING、UPSERT、或 truncate 后插入);用环境变量切换「本地小集 / 集成中等 / 压测大集」配置。 - 执行校验:核对行数,检查外键是否都指向已存在行,并记录各表填充结果。
你只需提供模式(或迁移路径)、目标环境和数据规模,也可指定数据特征(如多时区用户、近 12 个月订单)。
边界与注意
- Faker 不保证大规模下的全局唯一,需
fake.unique或计数器后缀;循环外键要分两阶段插入再更新。 - 万级以上行数应走批量加载(如 PostgreSQL
COPY),而非逐条INSERT。 - 脚本应带环境守卫,禁止对生产库执行种子;显式 ID 填充后记得重置自增序列。
使用场景
- 新服务本地 PostgreSQL 空库,需按迁移生成用户、商品、订单且外键顺序正确的可重复种子脚本
- 集成测试要在每张表写入千级行数,并要求固定随机种子以便 CI 结果可复现
- 预发布环境需要中等规模数据,并验证种子跑两遍不会产生重复主键或违反唯一约束
- 压测前要把单表扩到十万行以上,希望脚本建议用 COPY 等批量插入而非逐条 INSERT
适合人员
- 负责新模块联调的后端工程师,需要空库快速具备可查询的关联业务数据
- 维护 CI 流水线的测试工程师,希望种子数据规模与环境配置可由变量切换且结果稳定
- 在上线前审查数据脚本的 DBA,关注事务、外键完整性与生产环境误执行防护
- 使用 Prisma、Knex 或 Rails db:seed 的全栈开发者,需要与现有栈匹配的种子文件草案