Starter 应用

数据库与迁移

安全使用 PostgreSQL、Drizzle schema、测试数据库和生产迁移执行器。

已与启动模板提交 7d452a6 同步。

模板使用 PostgreSQL 与 Drizzle。src/db/schema.ts 是 schema 的唯一事实来源,src/db/migrations/ 中已提交的 SQL 是可部署历史。只有 src/models/** 可以调用 db()

本地流程

pnpm setup 会创建独立的开发库和测试库。测试数据库名必须包含 test,否则安全保护会拒绝清空数据。

修改 schema 后运行:

pnpm db:generate
pnpm db:migrate
pnpm test:db:setup
pnpm test:db

将生成的 SQL 和 meta/_journal.json 与代码一起提交,不要修改已部署的迁移。

生产流程

应用部署不会自动执行迁移:

pnpm db:check:prod
pnpm db:migrate:prod

生产执行器非交互运行,使用 PostgreSQL advisory lock 并校验 migration checksum。先备份,并采用 expand/contract 变更,使旧代码和新代码都能在 schema 与应用分开发版期间工作。

数据约定

  • 数字 id 仅供内部使用,公开 API 使用 uuid
  • 金额用最小货币单位的整数和币种保存。
  • 租户数据含 org_uuid,模型查询必须按组织限定。
  • 幂等键与交易号有数据库唯一约束。
  • 模板有意避免大范围外键耦合,因此删除顺序和引用检查由服务与生命周期策略管理。
  • 预约还使用 PostgreSQL exclusion constraint 防止已确认或保留时段重叠。

修改生产数据契约前,请阅读模板内的 docs/database.mdDEPLOYMENT.md

数据库与迁移 · Sushi SaaS