数据库迁移
迁移文件
迁移分两类:
| 类型 | 目录 | 说明 |
|---|---|---|
| 核心迁移 | libs/api-core/src/shared/migrations/ | 系统表(用户、组织、计费等) |
| 业务迁移 | api/src/migrations/ | 你的业务表 |
创建迁移
在 api/src/migrations/ 下创建 SQL 文件,以日期命名:
-- api/src/migrations/20260416.sql
CREATE TABLE IF NOT EXISTS todos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL,
title VARCHAR(255) NOT NULL,
completed BOOLEAN DEFAULT false,
created_at BIGINT DEFAULT EXTRACT(EPOCH FROM NOW())::BIGINT,
updated_at BIGINT DEFAULT EXTRACT(EPOCH FROM NOW())::BIGINT
);
执行迁移
npm run migrate
工作原理
迁移脚本(libs/api-core/src/shared/scripts/migrate.ts):
- 创建
migrations表(记录已执行的迁移) - 按文件名排序读取所有
.sql文件 - 跳过已执行的,执行新的
- 先执行核心迁移,再执行业务迁移
[core] Executed: 20251001.sql
[core] Skipped: 20260411.sql(已执行过)
[user] Executed: 20260416.sql
编写规范
- 使用
CREATE TABLE IF NOT EXISTS避免重复创建 - 使用
ALTER TABLE ... ADD COLUMN IF NOT EXISTS添加字段 - 时间戳统一用
BIGINT(Unix 时间戳) - ID 统一用
UUID - 多租户表必须有
tenant_id字段