drizzle-kit migrate
本指南假定您熟悉
- Drizzle 和
drizzle-kit
入门 - 在此阅读
- Drizzle 模式基础 - 在此阅读
- 数据库连接基础 - 在此阅读
- Drizzle 迁移基础 - 在此阅读
- Drizzle Kit 概述 和 配置文件
drizzle-kit generate
命令 - 在此处阅读
drizzle-kit migrate
允许您应用由 drizzle-kit generate
生成的 SQL 迁移。它旨在涵盖管理 Drizzle 迁移的代码优先(选项 3)方法。
Drizzle Kit migrate
命令会触发一系列事件
- 读取迁移文件夹并读取所有
.sql
迁移文件
- 连接到数据库并从 drizzle 迁移日志表中获取条目
- 根据以前应用的迁移,它将决定要运行哪些新迁移
- 运行 SQL 迁移并将应用的迁移记录到 drizzle 迁移表中
├ 📂 drizzle
│ ├ 📂 _meta
│ ├ 📜 0000_premium_mister_fear.sql
│ └ 📜 0001_delicate_professor_xavie.sql
└ …
┌───────────────────────┐
│ $ drizzle-kit migrate │
└─┬─────────────────────┘
│ ┌──────────────────────────┐
└ 1. reads migration.sql files in migrations folder │ │
2. fetch migration history from database -------------> │ │
┌ 3. pick previously unapplied migrations <-------------- │ DATABASE │
└ 4. apply new migration to the database ---------------> │ │
│ │
└──────────────────────────┘
[✓] done!
drizzle-kit migrate
命令要求您指定 dialect
和数据库连接凭据,您可以通过 drizzle.config.ts 配置文件或通过 CLI 选项提供它们
// drizzle.config.ts
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "postgresql",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname"
},
});
npx drizzle-kit migrate
npx drizzle-kit migrate --dialect=postgresql --url=postgresql://user:password@host:port/dbname
数据库中已应用的迁移日志
运行迁移后,Drizzle Kit 会将成功应用的迁移记录持久化到您的数据库中。它将把它们存储在名为 __drizzle_migrations
的迁移日志表中。
您可以通过 drizzle 配置文件自定义该表的**表名**和**模式**(仅限 PostgreSQL)
export default defineConfig({
dialect: "postgresql",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname"
},
migrations: {
table: 'my-migrations-table', // `__drizzle_migrations` by default
schema: 'public', // used in PostgreSQL only, `drizzle` by default
},
});
单个项目中的多个配置文件
您可以在项目中拥有多个配置文件,当您在同一项目中有多个数据库阶段或多个数据库时,这非常有用
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
bun drizzle-kit migrate --config=drizzle-dev.config.ts
bun 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 迁移并将其应用到我们的数据库
📦 <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: "postgresql",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname"
},
migrations: {
table: 'journal',
schema: 'drizzle',
},
});
import * as p from "drizzle-orm/pg-core";
export const users = p.pgTable("users", {
id: p.serial().primaryKey(),
name: p.text(),
})
现在运行
npx drizzle-kit generate --name=init
它将生成
📦 <project root>
├ …
├ 📂 migrations
│ ├ 📂 _meta
│ └ 📜 0000_init.sql
└ …
-- ./drizzle/0000_init.sql
CREATE TABLE "users"(
id serial primary key,
name text
)
现在运行
npx drizzle-kit migrate
我们的 SQL 迁移现在已成功应用到数据库 ✅