数据库概览
当前模型
数据库使用 PostgreSQL 和 Drizzle,开发可使用独立本地库,目标部署可使用 Neon。模型集中在 db/schema/,从 db/schema/index.ts 和 @repo/db 导出。
账号、会话、组织及订阅由 Better Auth 插件使用;工具记录和积分由业务接口维护。类型 Database 屏蔽底层驱动差异,不在业务代码依赖驱动私有连接对象。
连接与权限
完整本地预览用 DATABASE_URL 直连;线上接口用 Hyperdrive。认证、权限、订阅和积分走实时连接,只有可接受旧结果的读取才使用缓存连接。
应用连接使用日常业务角色,迁移使用有建表权限的管理角色。角色授权脚本位于 db/scripts/grant-app-role.sql,由实际数据库 / 公共对象所有者在指定库执行;新密码交互输入,已有账号不自动轮换。权限、连接池与实际复验见数据库角色与凭据。
常用命令
sh
bun db:generate
bun db:check
bun db:typecheck
bun db:studio生成迁移和检查不会替你完成线上发布。db:migrate 应用于明确选择的数据库;db:push 直接调整结构,仅适合已确认的可丢弃本地库。
环境选择
db/drizzle.config.ts 只接受开发、预发布和生产。预发布与生产必须存在各自 .env.<环境>.local,并由该文件明确提供 DATABASE_URL,不能回退到开发库或沿用 shell 中旧地址。
测试使用进程内 PGlite,不使用真实开发或生产连接;ENVIRONMENT=test 不作为数据库迁移目标。
完整归档、校验和独立空库恢复使用新增 bun db:backup / bun db:restore,详见数据库备份与恢复。原导出命令默认只导出结构,不作为完整备份。