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 的 code first(选项 3) 方法。
Drizzle Kit migrate 命令会触发一系列事件:
- 读取 migration 文件夹并读取所有
.sql migration 文件
- 连接到数据库并从 drizzle migrations 日志表中获取条目
- 基于之前已应用的 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: "sqlite",
schema: "./src/schema.ts",
dbCredentials: {
url: "./sqlite.db"
},
});
npx drizzle-kit migrate
npx drizzle-kit migrate --dialect=sqlite --url=./sqlite.db
数据库中的已应用 migrations 日志
运行 migrations 时,Drizzle Kit 会将成功应用的 migrations 记录持久化到你的数据库中。
它会将这些记录存储在名为 __drizzle_migrations 的 migrations 日志表中。
你可以通过 drizzle 配置文件自定义该日志表的表名:
export default defineConfig({
dialect: "sqlite",
schema: "./src/schema.ts",
dbCredentials: {
url: "./sqlite.db"
},
migrations: {
table: 'my-migrations-table', // 默认情况下为 `__drizzle_migrations`
},
});
一个项目中的多个配置文件
你可以在项目中拥有多个配置文件,当你有多个数据库阶段或同一个项目中有多个数据库时,这非常有用:
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: "sqlite",
schema: "./src/schema.ts",
dbCredentials: {
url: "./sqlite.db"
},
migrations: {
table: 'journal',
},
});
import * as p from "drizzle-orm/sqlite-core";
export const users = p.sqliteTable("users", {
id: p.integer().primaryKey({ autoIncrement: true }),
name: p.text(),
})
现在让我们运行
npx drizzle-kit generate --name=init
它会生成
📦 <project root>
├ …
├ 📂 migrations
│ ├ 📂 20242409125510_init
└ …
-- ./drizzle/0000_init.sql
CREATE TABLE `users` (
`id` integer PRIMARY KEY AUTOINCREMENT,
`name` text
);
现在让我们运行
npx drizzle-kit migrate
我们的 SQL migration 现在已经成功应用到数据库中 ✅