drizzle-kit pull

This guide assumes familiarity with:

drizzle-kit pull은 κΈ°μ‘΄ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆλ₯Ό pull(introspect)ν•˜κ³  schema.ts drizzle μŠ€ν‚€λ§ˆ νŒŒμΌμ„ 생성할 수 있게 ν•΄μ£Όλ©°, Drizzle λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μš°μ„  μ ‘κ·Ό 방식을 닀루도둝 μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‚΄λΆ€μ μœΌλ‘œ μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”?

Drizzle Kit pull λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  1. κΈ°μ‘΄ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ(DDL)λ₯Ό Pullν•©λ‹ˆλ‹€
  2. schema.ts drizzle μŠ€ν‚€λ§ˆ νŒŒμΌμ„ μƒμ„±ν•˜κ³  out 폴더에 μ €μž₯ν•©λ‹ˆλ‹€
                                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” 
                                  β”‚                        β”‚ <---  CREATE TABLE "users" (
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚                        β”‚        "id" SERIAL PRIMARY KEY,
β”‚ ~ drizzle-kit pull       β”‚      β”‚                        β”‚        "name" TEXT,
β””β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚        DATABASE        β”‚        "email" TEXT UNIQUE
  β”‚                               β”‚                        β”‚       );
  β”” Pull datatabase schema -----> β”‚                        β”‚
  β”Œ Generate Drizzle       <----- β”‚                        β”‚
  β”‚ schema TypeScript file        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  β”‚
  v
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(), 
};

TypeScript ν”„λ‘œμ νŠΈ μ™ΈλΆ€μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆλ₯Ό 관리해야 ν•˜κ±°λ‚˜ λ‹€λ₯Έ μ‚¬λžŒμ΄ κ΄€λ¦¬ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 ν›Œλ₯­ν•œ μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€.




drizzle-kit pull은 dialect와 λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° url λ˜λŠ” user:password@host:port/db λ§€κ°œλ³€μˆ˜ 쀑 ν•˜λ‚˜λ₯Ό μ§€μ •ν•΄μ•Ό ν•˜λ©°, drizzle.config.ts ꡬ성 파일 λ˜λŠ” CLI μ˜΅μ…˜μ„ 톡해 μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

ꡬ성 파일 μ‚¬μš©
CLI μ˜΅μ…˜ μ‚¬μš©
// drizzle.config.ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql",
  dbCredentials: {
    url: "postgresql://user:password@host:port/dbname",
  },
});
npx drizzle-kit pull

ν•˜λ‚˜μ˜ ν”„λ‘œμ νŠΈμ—μ„œ μ—¬λŸ¬ ꡬ성 파일 μ‚¬μš©

ν”„λ‘œμ νŠΈμ— μ—¬λŸ¬ ꡬ성 νŒŒμΌμ„ κ°€μ§ˆ 수 있으며, μ΄λŠ” μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ λ‹¨κ³„λ‚˜ λ™μΌν•œ ν”„λ‘œμ νŠΈμ—μ„œ μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ λ˜λŠ” λ‹€λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•  λ•Œ 맀우 μœ μš©ν•©λ‹ˆλ‹€:

npm
yarn
pnpm
bun
npx drizzle-kit pull --config=drizzle-dev.config.ts
npx drizzle-kit pull --config=drizzle-prod.config.ts
πŸ“¦ <project root>
 β”œ πŸ“‚ drizzle
 β”œ πŸ“‚ src
 β”œ πŸ“œ .env
 β”œ πŸ“œ drizzle-dev.config.ts
 β”œ πŸ“œ drizzle-prod.config.ts
 β”œ πŸ“œ package.json
 β”” πŸ“œ tsconfig.json

λ°μ΄ν„°λ² μ΄μŠ€ λ“œλΌμ΄λ²„ μ§€μ •

IMPORTANT

Expo SQLite 및 OP SQLiteλŠ” μ˜¨λ””λ°”μ΄μŠ€(μ‚¬μš©μžλ³„) λ°μ΄ν„°λ² μ΄μŠ€μ΄λ―€λ‘œ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆλ₯Ό pullν•  방법이 μ—†μŠ΅λ‹ˆλ‹€.
μž„λ² λ””λ“œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 경우 Drizzle은 μž„λ² λ””λ“œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€ - μ‹œμž‘ν•˜κΈ° κ°€μ΄λ“œλ₯Ό ν™•μΈν•˜μ„Έμš”.

Drizzle Kit은 사전 λ²ˆλ“€λœ λ°μ΄ν„°λ² μ΄μŠ€ λ“œλΌμ΄λ²„μ™€ ν•¨κ»˜ μ œκ³΅λ˜μ§€ μ•ŠμœΌλ©°, dialectλ₯Ό 기반으둜 ν˜„μž¬ ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ λ°μ΄ν„°λ² μ΄μŠ€ λ“œλΌμ΄λ²„λ₯Ό μžλ™μœΌλ‘œ μ„ νƒν•©λ‹ˆλ‹€ - λ…Όμ˜ 보기.

λŒ€λΆ€λΆ„μ˜ λ™μΌν•œ dialect λ“œλΌμ΄λ²„λŠ” λ™μΌν•œ μ—°κ²° λ§€κ°œλ³€μˆ˜ μ„ΈνŠΈλ₯Ό κ³΅μœ ν•˜μ§€λ§Œ, aws-data-api, pglight, d1-http와 같은 μ˜ˆμ™Έμ˜ 경우 λͺ…μ‹œμ μœΌλ‘œ driver λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

AWS Data API
PGLite
Cloudflare D1 HTTP
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql",
  driver: "aws-data-api",
  dbCredentials: {
    database: "database",
    resourceArn: "resourceArn",
    secretArn: "secretArn",
  },
};

ν…Œμ΄λΈ”, μŠ€ν‚€λ§ˆ 및 ν™•μž₯ 포함

drizzle-kit pushλŠ” 기본적으둜 public μŠ€ν‚€λ§ˆμ˜ λͺ¨λ“  ν…Œμ΄λΈ”μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€. tablesFilters, schemaFilter, extensionFilters μ˜΅μ…˜μ„ 톡해 ν…Œμ΄λΈ”, μŠ€ν‚€λ§ˆ, ν™•μž₯ λͺ©λ‘μ„ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

tablesFilterglob 기반 ν…Œμ΄λΈ” 이름 ν•„ν„°, 예: ["users", "user_info"] λ˜λŠ” "user*". 기본값은 "*"
schemaFilterμŠ€ν‚€λ§ˆ 이름 ν•„ν„°, 예: ["public", "drizzle"]. 기본값은 ["public"]
extensionsFiltersμ„€μΉ˜λœ λ°μ΄ν„°λ² μ΄μŠ€ ν™•μž₯ λͺ©λ‘, 예: ["postgis"]. 기본값은 []

public μŠ€ν‚€λ§ˆμ˜ λͺ¨λ“  ν…Œμ΄λΈ”μ—μ„œλ§Œ μž‘λ™ν•˜λ„λ‘ drizzle-kit을 κ΅¬μ„±ν•˜κ³ , public μŠ€ν‚€λ§ˆμ— 자체 ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜λŠ” postgis ν™•μž₯이 μ„€μΉ˜λ˜μ–΄ μžˆλ‹€λŠ” 것을 drizzle-kit에 μ•Œλ €μ„œ drizzle이 이λ₯Ό λ¬΄μ‹œν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

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",
  },
  extensionsFilters: ["postgis"],
  schemaFilter: ["public"],
  tablesFilter: ["*"],
});
npx drizzle-kit push

ꡬ성 μ˜΅μ…˜ ν™•μž₯ λͺ©λ‘

drizzle.config.ts νŒŒμΌμ„ 톡해 drizzle-kit을 κ΅¬μ„±ν•˜λŠ” 것을 ꢌμž₯ν•˜μ§€λ§Œ, ν•„μš”ν•œ 경우(예: CI/CD νŒŒμ΄ν”„λΌμΈ λ“±) CLIλ₯Ό 톡해 λͺ¨λ“  ꡬ성 μ˜΅μ…˜μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

dialectν•„μˆ˜λ°μ΄ν„°λ² μ΄μŠ€ dialect, postgresql mysql sqlite turso singlestore 쀑 ν•˜λ‚˜
driverλ“œλΌμ΄λ²„ μ˜ˆμ™Έ aws-data-api d1-http pglight
outλ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 좜λ ₯ 폴더 경둜, 기본값은 ./drizzle
urlλ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° λ¬Έμžμ—΄
userλ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš©μž
passwordλ°μ΄ν„°λ² μ΄μŠ€ λΉ„λ°€λ²ˆν˜Έ
host호슀트
port포트
databaseλ°μ΄ν„°λ² μ΄μŠ€ 이름
configꡬ성 파일 경둜, 기본값은 drizzle.config.ts
introspect-casing컬럼, ν…Œμ΄λΈ” λ“±μ˜ JS ν‚€ 생성 μ „λž΅. preserve camel
tablesFilterν…Œμ΄λΈ” 이름 ν•„ν„°
schemaFilterμŠ€ν‚€λ§ˆ 이름 ν•„ν„°. κΈ°λ³Έκ°’: ["public"]
extensionsFiltersλ°μ΄ν„°λ² μ΄μŠ€ ν™•μž₯ λ‚΄λΆ€ λ°μ΄ν„°λ² μ΄μŠ€ ν•„ν„°
npm
yarn
pnpm
bun
npx drizzle-kit pull --dialect=postgresql --url=postgresql://user:password@host:port/dbname
npx drizzle-kit pull --dialect=postgresql --driver=pglite url=database/
npx drizzle-kit pull --dialect=postgresql --tablesFilter=β€˜user*’ --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname