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. 마이그레이션 폴더에서 migration.sql 파일을 읽음 │ │
2. 데이터베이스에서 마이그레이션 기록을 가져옴 ---------> │ DATABASE │
┌ 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
📦 <project root>
├ 📂 drizzle
├ 📂 src
├ 📜 .env
├ 📜 drizzle-dev.config.ts
├ 📜 drizzle-prod.config.ts
├ 📜 package.json
└ 📜 tsconfig.json
위 예제에서 볼 수 있듯이, drizzle-dev.config.ts
와 drizzle-prod.config.ts
라는 두 개의 설정 파일을 사용하여 개발 환경과 프로덕션 환경을 각각 관리할 수 있습니다. 이렇게 하면 환경에 따라 다른 설정을 쉽게 적용할 수 있습니다.
확장 예제
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 마이그레이션이 데이터베이스에 성공적으로 적용되었습니다 ✅