drizzle-kit pull
This guide assumes familiarity with:
drizzle-kit pullμ κΈ°μ‘΄ λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§λ₯Ό pull(introspect)νκ³ schema.ts drizzle μ€ν€λ§ νμΌμ μμ±ν μ μκ² ν΄μ£Όλ©°,
Drizzle λ§μ΄κ·Έλ μ΄μ
μ λ°μ΄ν°λ² μ΄μ€ μ°μ μ κ·Ό λ°©μμ λ€λ£¨λλ‘ μ€κ³λμμ΅λλ€.
λ΄λΆμ μΌλ‘ μ΄λ»κ² μλνλμ?
Drizzle Kit pull λͺ
λ Ήμ΄λ₯Ό μ€ννλ©΄ λ€μμ μνν©λλ€:
- κΈ°μ‘΄ λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§(DDL)λ₯Ό Pullν©λλ€
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
npx drizzle-kit pull --dialect=postgresql --url=postgresql://user:password@host:port/dbname
νλμ νλ‘μ νΈμμ μ¬λ¬ κ΅¬μ± νμΌ μ¬μ©
νλ‘μ νΈμ μ¬λ¬ κ΅¬μ± νμΌμ κ°μ§ μ μμΌλ©°, μ΄λ μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ λ¨κ³λ λμΌν νλ‘μ νΈμμ μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ λλ λ€λ₯Έ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©ν λ λ§€μ° μ μ©ν©λλ€:
npx drizzle-kit pull --config=drizzle-dev.config.ts
npx drizzle-kit pull --config=drizzle-prod.config.ts
yarn drizzle-kit pull --config=drizzle-dev.config.ts
yarn drizzle-kit pull --config=drizzle-prod.config.ts
pnpm drizzle-kit pull --config=drizzle-dev.config.ts
pnpm drizzle-kit pull --config=drizzle-prod.config.ts
bunx drizzle-kit pull --config=drizzle-dev.config.ts
bunx 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",
},
};
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "postgresql",
driver: "pglite",
dbCredentials: {
// inmemory
url: ":memory:"
// or database folder
url: "./database/"
},
};
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "sqlite",
driver: "d1-http",
dbCredentials: {
accountId: "accountId",
databaseId: "databaseId",
token: "token",
},
};
ν
μ΄λΈ, μ€ν€λ§ λ° νμ₯ ν¬ν¨
drizzle-kit pushλ κΈ°λ³Έμ μΌλ‘ public μ€ν€λ§μ λͺ¨λ ν
μ΄λΈμ κ΄λ¦¬ν©λλ€.
tablesFilters, schemaFilter, extensionFilters μ΅μ
μ ν΅ν΄ ν
μ΄λΈ, μ€ν€λ§, νμ₯ λͺ©λ‘μ ꡬμ±ν μ μμ΅λλ€.
| |
|---|
tablesFilter | glob κΈ°λ° ν
μ΄λΈ μ΄λ¦ νν°, μ: ["users", "user_info"] λλ "user*". κΈ°λ³Έκ°μ "*" |
schemaFilter | μ€ν€λ§ μ΄λ¦ νν°, μ: ["public", "drizzle"]. κΈ°λ³Έκ°μ ["public"] |
extensionsFilters | μ€μΉλ λ°μ΄ν°λ² μ΄μ€ νμ₯ λͺ©λ‘, μ: ["postgis"]. κΈ°λ³Έκ°μ [] |
public μ€ν€λ§μ λͺ¨λ ν
μ΄λΈμμλ§ μλνλλ‘ drizzle-kitμ ꡬμ±νκ³ ,
public μ€ν€λ§μ μ체 ν
μ΄λΈμ μμ±νλ postgis νμ₯μ΄ μ€μΉλμ΄ μλ€λ κ²μ drizzle-kitμ μλ €μ
drizzleμ΄ μ΄λ₯Ό 무μν μ μλλ‘ ν©λλ€.
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 | | λ°μ΄ν°λ² μ΄μ€ νμ₯ λ΄λΆ λ°μ΄ν°λ² μ΄μ€ νν° |
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
yarn drizzle-kit pull --dialect=postgresql --url=postgresql://user:password@host:port/dbname
yarn drizzle-kit pull --dialect=postgresql --driver=pglite url=database/
yarn drizzle-kit pull --dialect=postgresql --tablesFilter=βuser*β --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname
pnpm drizzle-kit pull --dialect=postgresql --url=postgresql://user:password@host:port/dbname
pnpm drizzle-kit pull --dialect=postgresql --driver=pglite url=database/
pnpm drizzle-kit pull --dialect=postgresql --tablesFilter=βuser*β --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname
bunx drizzle-kit pull --dialect=postgresql --url=postgresql://user:password@host:port/dbname
bunx drizzle-kit pull --dialect=postgresql --driver=pglite url=database/
bunx drizzle-kit pull --dialect=postgresql --tablesFilter=βuser*β --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname
