Drizzle Migrate
轻量 TypeScript 优先 ORM 迁移用于 Postgres、MySQL、SQLite。
CI/CD进阶
为什么
Drizzle 是轻量 ORM,完整 TypeScript 推断无 codegen。迁移是 SQL 文件,易审查应用。包比 Prisma 小。
何时使用
边缘/serverless 应用需轻量 ORM 用 Drizzle。需 Prisma Studio GUI 避免。
如何做
1. Schema — schema.ts 配 pgTable/mysqlTable
2. 配置 — drizzle.config.ts 配 dialect + credentials
3. 生成 — npx drizzle-kit generate(创建 SQL 迁移)
4. 迁移 — npx drizzle-kit migrate(应用)
5. 推送 — npx drizzle-kit push(开发,无迁移文件)
6. Studio — npx drizzle-kit studio(GUI)
7. 内省 — npx drizzle-kit introspect(现有 DB)
示例
// schema.ts
import { pgTable, serial, varchar } from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: serial("id").primaryKey(),
email: varchar("email").notNull().unique(),
});
// drizzle.config.ts
export default {
schema: "./schema.ts",
out: "./drizzle",
dialect: "postgresql",
dbCredentials: { url: process.env.DATABASE_URL! },
};
# 生成和迁移
npx drizzle-kit generate # 在 drizzle/ 创建 SQL
npx drizzle-kit migrate # 应用迁移
// 代码中使用
import { drizzle } from "drizzle-orm/node-postgres";
const db = drizzle(pool, { schema });
常见问题
- ⚠迁移顺序 — Drizzle 用时间戳,确保团队时钟同步
- ⚠生产 push — push 跳过迁移文件,生产用 migrate
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓生产用 generate + migrate — 可审查 SQL 文件
- ✓仅开发用 push — 快速迭代,无迁移历史
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求