---
url: /docs/database/seeding.md
---
# 初始化数据

## 用途与命令

初始化脚本用于开发和预发布的测试资料，入口为 `db/scripts/seed.ts`，数据文件在 `db/seeds/`。

```sh
bun db:seed
bun db:seed:staging
```

执行前核对目标库。项目没有生产初始化命令；真实参考数据需要可审查的一次性迁移或明确的管理流程，不能把演示账号导入客户库。

## 幂等不是自动保证

现有用户初始化使用冲突忽略。只有数据存在稳定唯一键时，`onConflictDoNothing()` 才能防止重跑重复；每次随机生成新主键且没有其他唯一约束仍会插入新数据。

新增初始化函数时，先定义稳定唯一字段，再按依赖顺序执行：用户、组织、成员、业务数据。不要使用真实邮箱或真实用户文件作为样例。

## 演示账号与可登录账号

表里有用户不代表已经具备可用密码身份或有效会话。需要通过认证流程创建凭据，不能直接把明文密码写入身份表。本机完整预览的隔离演示账号也不随复制新站分发。

## 排查

缺表先检查迁移；唯一冲突检查数据键；外键冲突检查执行顺序；无法登录检查认证身份而非只看用户行。开发测试优先使用 `@repo/db/testing` 的进程内数据库，减少污染真实数据库。
