drizzle-kit migrate
 
This guide assumes familiarity with:
    
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. 读取迁移.sql 文件在迁移文件夹中       │                          │
    2. 从数据库获取迁移历史 -------------> │                          │
  ┌ 3. 选择之前未应用的迁移 <-------------- │         数据库         │
  └ 4. 将新迁移应用到数据库 ---------------> │                          │
                                                            │                          │
                                                            └──────────────────────────┘
[✓] 完成!        
   
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`
    schema: 'public', // 仅在 PostgreSQL 中使用,默认是 `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
      
        
📦 <项目根目录>
 ├ 📂 drizzle
 ├ 📂 src
 ├ 📜 .env
 ├ 📜 drizzle-dev.config.ts
 ├ 📜 drizzle-prod.config.ts
 ├ 📜 package.json
 └ 📜 tsconfig.json
扩展示例
让我们生成 SQL 迁移并使用 drizzle-kit generate 和 drizzle-kit migrate 命令将其应用到我们的数据库。
📦 <项目根目录>
 ├ 📂 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
它将生成
 📦 <项目根目录>
 ├ …
 ├ 📂 migrations
 │ ├ 📂 _meta
 │ └ 📜 0000_init.sql 
 └ …
-- ./drizzle/0000_init.sql
CREATE TABLE "users"(
  id serial primary key,
  name text
)
  
现在让我们运行
npx drizzle-kit migrate
我们的 SQL 迁移现在已成功应用到数据库 ✅