drizzle-kit migrate
本指南假定您已熟悉:
- 开始使用 Drizzle 和
drizzle-kit - 点击这里
- Drizzle schema 基础 - 点击这里
- 数据库连接基础 - 点击这里
- Drizzle migrations 基础 - 点击这里
- Drizzle Kit 概览 和 配置文件
drizzle-kit generate 命令 - 点击这里
drizzle-kit migrate 允许你应用由 drizzle-kit generate 生成的 SQL migrations。
它旨在覆盖管理 Drizzle migrations 的 代码优先(选项 3) 方法。
Drizzle Kit migrate 命令会触发一系列事件:
- 遍历 migration 文件夹并读取所有
.sql migration 文件
- 连接到数据库并从 drizzle migrations log 表中获取条目
- 基于之前已应用的 migrations,它将决定要运行哪些新的 migrations
- 运行 SQL migrations,并将已应用的 migrations 记录到 drizzle migrations 表中
├ 📂 drizzle
│ ├ 📂 20242409125510_premium_mister_fear
│ └ 📂 20242409135510_delicate_professor_xavie
└ …
┌───────────────────────┐
│ $ drizzle-kit migrate │
└─┬─────────────────────┘
│ ┌──────────────────────────┐
└ 1. 读取 migrations 文件夹中的 migration.sql 文件 │ │
2. 从数据库获取 migration 历史 -------------> │ │
┌ 3. 选择之前尚未应用的 migrations <-------------- │ DATABASE │
└ 4. 将新的 migration 应用到数据库 ---------------> │ │
│ │
└──────────────────────────┘
[✓] 完成!
drizzle-kit migrate 命令要求你同时指定 dialect 和数据库连接凭据,
你可以通过 drizzle.config.ts 配置文件或 CLI 选项来提供它们
// drizzle.config.ts
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "cockroach",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname"
},
});
npx drizzle-kit migrate
npx drizzle-kit migrate --dialect=cockroach --url=postgresql://user:password@host:port/dbname
数据库中的已应用 migrations 日志
运行 migrations 时,Drizzle Kit 会将成功应用的 migrations 记录持久化到你的数据库中。
它会将这些记录存储在 drizzle schema 中名为 __drizzle_migrations 的 migrations log 表里。
你可以通过 drizzle 配置文件来自定义该表的 table 和 schema:
export default defineConfig({
dialect: "cockroach",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname"
},
migrations: {
table: 'my-migrations-table', // 默认是 `__drizzle_migrations`
schema: 'public', // 默认是 `drizzle`
},
});
一个项目中使用多个配置文件
你可以在项目中拥有多个配置文件,当你有多个数据库阶段或同一项目中的多个数据库时,这非常有用:
npx drizzle-kit migrate --config=drizzle-dev.config.ts
npx drizzle-kit migrate --config=drizzle-prod.config.ts
yarn drizzle-kit migrate --config=drizzle-dev.config.ts
yarn drizzle-kit migrate --config=drizzle-prod.config.ts
pnpm drizzle-kit migrate --config=drizzle-dev.config.ts
pnpm drizzle-kit migrate --config=drizzle-prod.config.ts
bunx drizzle-kit migrate --config=drizzle-dev.config.ts
bunx drizzle-kit migrate --config=drizzle-prod.config.ts
📦 <project root>
├ 📂 drizzle
├ 📂 src
├ 📜 .env
├ 📜 drizzle-dev.config.ts
├ 📜 drizzle-prod.config.ts
├ 📜 package.json
└ 📜 tsconfig.json
扩展示例
让我们使用 drizzle-kit generate 和 drizzle-kit migrate 命令生成 SQL migration 并将其应用到数据库中
📦 <project root>
├ 📂 drizzle
├ 📂 src
│ ├ 📜 schema.ts
│ └ 📜 index.ts
├ 📜 drizzle.config.ts
└ …
drizzle.config.ts
src/schema.ts
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "cockroach",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname"
},
migrations: {
table: 'journal',
schema: 'drizzle',
},
});
import * as p from "drizzle-orm/cockroach-core";
export const users = p.cockroachTable("users", {
id: p.int4().primaryKey(),
name: p.string(),
})
现在让我们运行
npx drizzle-kit generate --name=init
它将生成
📦 <project root>
├ …
├ 📂 migrations
│ ├ 📂 20242409125510_init
└ …
-- ./drizzle/0000_init.sql
CREATE TABLE "users" (
"id" int4 PRIMARY KEY,
"name" string
);
现在让我们运行
npx drizzle-kit migrate
然后我们的 SQL migration 现在已经成功应用到数据库中 ✅