drizzle-kit generate는 Drizzle 스키마 선언 시점 또는 이후 스키마 변경 시 SQL 마이그레이션을 생성할 수 있도록 해줍니다.
내부적으로 어떻게 동작하나요?
Drizzle Kit generate 명령은 다음과 같은 일련의 작업을 수행합니다:
Drizzle 스키마 파일을 읽고 스키마의 JSON 스냅샷을 생성합니다
이전 마이그레이션 폴더를 읽고 현재 JSON 스냅샷을 가장 최근 스냅샷과 비교합니다
JSON 차이를 기반으로 SQL 마이그레이션을 생성합니다
현재 타임스탬프를 이름으로 사용하여 마이그레이션 폴더에 migration.sql과 snapshot.json을 저장합니다
src/schema.ts
import * as p from "./drizzle-orm/pg-core";export const users = p.pgTable("users", { id: p.serial().primaryKey(), name: p.text(), email: p.text().unique(),};
┌────────────────────────┐ │ $ drizzle-kit generate │ └─┬──────────────────────┘ │ └ 1. read previous migration folders 2. find diff between current and previous schema 3. prompt developer for renames if necessary ┌ 4. generate SQL migration and persist to file │ ┌─┴───────────────────────────────────────┐ │ 📂 drizzle │ └ 📂 20242409125510_premium_mister_fear │ ├ 📜 migration.sql │ └ 📜 snapshot.json v
-- drizzle/20242409125510_premium_mister_fear/migration.sqlCREATE TABLE "users" ( "id" SERIAL PRIMARY KEY, "name" TEXT, "email" TEXT UNIQUE);
코드 우선 접근 방식으로 Drizzle 마이그레이션을 관리하도록 설계되었습니다.
생성된 마이그레이션은 drizzle-kit migrate를 사용하거나, drizzle-orm의 migrate() 함수를 사용하거나,
bytebase와 같은 외부 마이그레이션 도구를 사용하거나, 데이터베이스에서 직접 실행하여 적용할 수 있습니다.
drizzle-kit generate 명령은 dialect와 schema 경로 옵션을 모두 제공해야 합니다.
drizzle.config.ts 설정 파일을 통해 제공하거나 CLI 옵션으로 제공할 수 있습니다
-- ./drizzle/20242409125510_seed/migration.sqlINSERT INTO "users" ("name") VALUES('Dan');INSERT INTO "users" ("name") VALUES('Andrew');INSERT INTO "users" ("name") VALUES('Dandrew');
-- ./drizzle/20242409125510_seed-users/migration.sqlINSERT INTO "users" ("name") VALUES('Dan');INSERT INTO "users" ("name") VALUES('Andrew');INSERT INTO "users" ("name") VALUES('Dandrew');