drizzle-kit pull

This guide assumes familiarity with:

drizzle-kit pull을 사용하면 기존 데이터베이스 스키마를 그대로 가져와(인트로스펙션) schema.ts Drizzle 스키마 파일을 생성할 수 있으며, Drizzle 마이그레이션의 데이터베이스 우선 접근 방식을 지원하도록 설계되었습니다.

내부 동작 원리

Drizzle Kit pull 명령어를 실행하면:

  1. 기존 데이터베이스에서 데이터베이스 스키마(DDL)를 가져옵니다
  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 pulldialect와 데이터베이스 연결 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 SQLiteOP 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",
  },
};

초기 풀

WARNING

이 기능은 1.0.0-beta.2 이상에서 사용할 수 있습니다.

npm
yarn
pnpm
bun
npm i drizzle-orm@beta
npm i drizzle-kit@beta -D

--init 플래그를 사용하여 가져온 스키마를 데이터베이스에 적용된 마이그레이션으로 표시할 수 있으며, 이후의 모든 마이그레이션은 초기 스키마를 기준으로 비교됩니다

npx drizzle-kit push --init

테이블, 스키마 및 확장 포함

drizzle-kit push는 기본적으로 public 스키마의 모든 테이블을 관리합니다. tablesFilters, schemaFilter, extensionFilters 옵션을 통해 테이블, 스키마 및 확장 목록을 구성할 수 있습니다.

tablesFilterglob 기반 테이블 이름 필터, 예: ["users", "user_info"] 또는 "user*". 기본값은 "*"
schemaFilterglob 기반 스키마 이름 필터, 예: ["public", "drizzle"] 또는 "drizzle*". 기본값은 "*"
extensionsFilters설치된 데이터베이스 확장 목록, 예: ["postgis"]. 기본값은 []

drizzle-kit이 public 스키마의 모든 테이블에만 작동하도록 구성하고, postgis 확장이 설치되어 있으며 public 스키마에 자체 테이블을 생성하므로 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를 통해 모든 설정 옵션을 제공할 수 있습니다.

dialectrequired데이터베이스 dialect, postgresql mysql sqlite turso singlestore mssql cockroachdb 중 하나
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