drizzle-kit migrate
This guide assumes familiarity with:
- 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
│ ├ 📂 20242409125510_premium_mister_fear
│ └ 📂 20242409135510_delicate_professor_xavie
└ …
┌───────────────────────┐
│ $ 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 설정 파일을 통해 해당 테이블의 table과 schema(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
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 마이그레이션을 생성하고 데이터베이스에 적용해보겠습니다
📦 <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
│ ├ 📂 20242409125510_init
└ …
-- ./drizzle/0000_init.sql
CREATE TABLE "users"(
id serial primary key,
name text
)
이제 다음 명령어를 실행해봅시다
npx drizzle-kit migrate
SQL 마이그레이션이 데이터베이스에 성공적으로 적용되었습니다 ✅