drizzle-kit generate
This guide assumes familiarity with:
drizzle-kit generateλ Drizzle μ€ν€λ§ μ μΈ μ λλ νμ μ€ν€λ§ λ³κ²½ μ μ΄λ₯Ό κΈ°λ°μΌλ‘ SQL λ§μ΄κ·Έλ μ΄μ
μ μμ±ν μ μκ² ν΄μ€λλ€.
λ΄λΆμ μΌλ‘ μ΄λ»κ² μλνλμ?
Drizzle Kit generate λͺ
λ Ήμ΄λ μΌλ ¨μ μ΄λ²€νΈλ₯Ό νΈλ¦¬κ±°ν©λλ€:
Drizzle μ€ν€λ§ νμΌμ μ½κ³ μ€ν€λ§μ json μ€λ
μ·μ μμ±ν©λλ€
μ΄μ λ§μ΄κ·Έλ μ΄μ
ν΄λλ₯Ό μ½κ³ νμ¬ json μ€λ
μ·μ κ°μ₯ μ΅κ·Ό κ²κ³Ό λΉκ΅ν©λλ€
json μ°¨μ΄μ μ κΈ°λ°μΌλ‘ SQL λ§μ΄κ·Έλ μ΄μ
μ μμ±ν©λλ€
νμ¬ νμμ€ν¬νλ‘ λ§μ΄κ·Έλ μ΄μ
ν΄λμ migration.sql λ° snapshot.jsonμ μ μ₯ν©λλ€
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 scheama
3. prompt developer for renames if necessary
β 4. generate SQL migration and persist to file
β βββ΄ββββββββββββββββββββββββββββββββββββββββ
β π drizzle
β β π _meta
β β π 0000_premium_mister_fear.sql
v -- drizzle/0000_premium_mister_fear.sql
CREATE 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 μ΅μ
μ ν΅ν΄ μ€μ ν μ μμ΅λλ€
κ΅¬μ± νμΌ μ¬μ©
CLI μ΅μ
μ¬μ©
// drizzle.config.ts
import { defineConfig } from "drizzle-kit" ;
export default defineConfig ({
dialect : "postgresql" ,
schema : "./src/schema.ts" ,
}); npx drizzle-kit generate npx drizzle-kit generate --dialect=postgresql --schema=./src/schema.ts
μ€ν€λ§ νμΌ κ²½λ‘
νλ‘μ νΈ μ 체μ λΆμ°λ λ¨μΌ schema.ts νμΌ λλ μνλ λ§νΌμ μ€ν€λ§ νμΌμ κ°μ§ μ μμ΅λλ€.
Drizzle Kitμ schema κ΅¬μ± μ΅μ
μ ν΅ν΄ glob νμμΌλ‘ κ²½λ‘λ₯Ό μ§μ ν΄μΌ ν©λλ€.
Example 1
Example 2
Example 3
Example 4
π¦ <project root>
β ...
β π drizzle
β π src
β β ...
β β π index.ts
β β π schema.ts
β π drizzle.config.ts
β π package.json import { defineConfig } from "drizzle-kit" ;
export default defineConfig ({
schema : "./src/schema.ts" ,
}); π¦ <project root>
β ...
β π drizzle
β π src
β β π user
β β β π handler.ts
β β β π schema.ts
β β π posts
β β β π handler.ts
β β β π schema.ts
β β π index.ts
β π drizzle.config.ts
β π package.json import { defineConfig } from "drizzle-kit" ;
export default defineConfig ({
schema : "./src/**/schema.ts" ,
//or
schema : [ "./src/user/schema.ts" , "./src/posts/schema.ts" ]
}); π¦ <project root>
β ...
β π drizzle
β π src
β β π schema
β β β π user.ts
β β β π post.ts
β β β π comment.ts
β β π index.ts
β π drizzle.config.ts
β π package.json import { defineConfig } from "drizzle-kit" ;
export default defineConfig ({
schema : "./src/schema/*" ,
}); π¦ <project root>
β ...
β π drizzle
β π src
β β π userById.ts
β β π userByEmail.ts
β β π listUsers.ts
β β π user.sql.ts
β β π postById.ts
β β π listPosts.ts
β β π post.sql.ts
β π index.ts
β π drizzle.config.ts
β π package.json import { defineConfig } from "drizzle-kit" ;
export default defineConfig ({
schema : "./src/**/*.sql.ts" , // Dax's favourite
});
μ¬μ©μ μ§μ λ§μ΄κ·Έλ μ΄μ
νμΌ μ΄λ¦
--name CLI μ΅μ
μ μ 곡νμ¬ μ¬μ©μ μ§μ λ§μ΄κ·Έλ μ΄μ
νμΌ μ΄λ¦μ μ€μ ν μ μμ΅λλ€
npx drizzle-kit generate --name=init
π¦ <project root>
β π drizzle
β β π _meta
β β π 0000_init.sql
β π src
β β¦
νλμ νλ‘μ νΈμμ μ¬λ¬ κ΅¬μ± νμΌ μ¬μ©
νλ‘μ νΈμ μ¬λ¬ κ΅¬μ± νμΌμ κ°μ§ μ μμΌλ©°, μ΄λ μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ λ¨κ³λ λμΌν νλ‘μ νΈμμ μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ λλ λ€λ₯Έ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©ν λ λ§€μ° μ μ©ν©λλ€:
npx drizzle-kit generate --config=drizzle-dev.config.ts
npx drizzle-kit generate --config=drizzle-prod.config.ts
yarn drizzle-kit generate --config=drizzle-dev.config.ts
yarn drizzle-kit generate --config=drizzle-prod.config.ts
pnpm drizzle-kit generate --config=drizzle-dev.config.ts
pnpm drizzle-kit generate --config=drizzle-prod.config.ts
bunx drizzle-kit generate --config=drizzle-dev.config.ts
bunx drizzle-kit generate --config=drizzle-prod.config.ts
π¦ <project root>
β π drizzle
β π src
β π .env
β π drizzle-dev.config.ts
β π drizzle-prod.config.ts
β π package.json
β π tsconfig.json
μ¬μ©μ μ§μ λ§μ΄κ·Έλ μ΄μ
νμ¬ Drizzle Kitμμ μ§μνμ§ μλ DDL λ³κ²½ λλ λ°μ΄ν° μλλ₯Ό μν΄ μ체 μ¬μ©μ μ§μ SQL λ§μ΄κ·Έλ μ΄μ
μ μμ±νκΈ° μν λΉ λ§μ΄κ·Έλ μ΄μ
νμΌμ μμ±ν μ μμ΅λλ€. μ¬μ©μ μ§μ λ§μ΄κ·Έλ μ΄μ
μ λν νμ₯ λ¬Έμ - μ¬κΈ° μ°Έμ‘°
drizzle-kit generate --custom --name=seed-users
π¦ <project root>
β π drizzle
β β π _meta
β β π 0000_init.sql
β β π 0001_seed-users.sql
β π src
β β¦ -- ./drizzle/0001_seed-users.sql
INSERT INTO "users" ( "name" ) VALUES ( 'Dan' );
INSERT INTO "users" ( "name" ) VALUES ( 'Andrew' );
INSERT INTO "users" ( "name" ) VALUES ( 'Dandrew' );
μ¬μ© κ°λ₯ν κ΅¬μ± μ΅μ
νμ₯ λͺ©λ‘
drizzle-kit generateλ CLI μ μ© μ΅μ
λͺ©λ‘μ κ°μ§κ³ μμ΅λλ€
customμ¬μ©μ μ§μ λ§μ΄κ·Έλ μ΄μ
μ μν λΉ SQL μμ± nameμ¬μ©μ μ§μ μ΄λ¦μΌλ‘ λ§μ΄κ·Έλ μ΄μ
μμ±
npx drizzle-kit generate --name=init
npx drizzle-kit generate --name=seed_users --custom
yarn drizzle-kit generate --name=init
yarn drizzle-kit generate --name=seed_users --custom
pnpm drizzle-kit generate --name=init
pnpm drizzle-kit generate --name=seed_users --custom
bunx drizzle-kit generate --name=init
bunx drizzle-kit generate --name=seed_users --custom
drizzle.config.ts νμΌμ ν΅ν΄ drizzle-kitμ ꡬμ±νλ κ²μ κΆμ₯νμ§λ§,
νμν κ²½μ°(μ: CI/CD νμ΄νλΌμΈ λ±) CLIλ₯Ό ν΅ν΄ λͺ¨λ κ΅¬μ± μ΅μ
μ μ 곡ν μ μμ΅λλ€.
dialectνμλ°μ΄ν°λ² μ΄μ€ dialect, postgresql mysql sqlite turso singlestore μ€ νλ schemaνμνμ
μ€ν¬λ¦½νΈ μ€ν€λ§ νμΌ λλ μ¬λ¬ μ€ν€λ§ νμΌμ΄ μλ ν΄λ κ²½λ‘ outλ§μ΄κ·Έλ μ΄μ
μΆλ ₯ ν΄λ, κΈ°λ³Έκ°μ ./drizzle configκ΅¬μ± νμΌ κ²½λ‘, κΈ°λ³Έκ°μ drizzle.config.ts breakpointsSQL λ¬Έ μ€λ¨μ , κΈ°λ³Έκ°μ true
νμ₯ μμ
./src/schema.tsμ μμΉν Drizzle μ€ν€λ§μ κΈ°λ³Έ ./drizzle λμ ./migrationsλΌλ λ§μ΄κ·Έλ μ΄μ
ν΄λλ₯Ό μ¬μ©νμ¬
0001_seed-users.sqlμ΄λΌλ μ΄λ¦μ μ¬μ©μ μ§μ postgresql λ§μ΄κ·Έλ μ΄μ
νμΌμ μμ±νλ λ°©λ²μ μμ μ
λλ€.
λν drizzle κ΅¬μ± νμΌμ configs ν΄λμ λ°°μΉν κ²μ
λλ€.
κ΅¬μ± νμΌμ μμ±ν΄λ΄
μλ€:
π¦ <project root>
β π migrations
β π configs
β β π drizzle.config.ts
β π src
β β¦
import { defineConfig } from "drizzle-kit" ;
export default defineConfig ({
dialect : "postgresql" ,
schema : "./src/schema.ts" ,
out : "./migrations" ,
});
μ΄μ λ€μμ μ€νν΄λ΄
μλ€
npx drizzle-kit generate --config=./configs/drizzle.config.ts --name=seed-users --custom
κ·Έλ¬λ©΄ μ±κ³΅μ μΌλ‘ μμ±λ©λλ€
π¦ <project root>
β β¦
β π migrations
β β π _meta
β β π 0000_init.sql
β β π 0001_seed-users.sql
β β¦ -- ./drizzle/0001_seed-users.sql
INSERT INTO "users" ( "name" ) VALUES ( 'Dan' );
INSERT INTO "users" ( "name" ) VALUES ( 'Andrew' );
INSERT INTO "users" ( "name" ) VALUES ( 'Dandrew' );