drizzle-kit pull
This guide assumes familiarity with:
drizzle-kit pull
명령어를 사용하면 기존 데이터베이스 스키마를 가져와서(introspect) schema.ts
파일로 Drizzle 스키마를 생성할 수 있습니다. 이 기능은 Drizzle 마이그레이션의 데이터베이스 우선 접근 방식 을 지원하기 위해 설계되었습니다.
Drizzle Kit의 pull
명령어를 실행하면 다음과 같은 과정이 진행됩니다:
기존 데이터베이스에서 스키마(DDL)를 가져옵니다.
schema.ts
파일을 생성하고 out
폴더에 저장합니다.
┌────────────────────────┐ ┌─────────────────────────┐
│ │ <--- CREATE TABLE "users" (
┌──────────────────────────┐ │ │ "id" SERIAL PRIMARY KEY,
│ ~ drizzle-kit pull │ │ │ "name" TEXT,
└─┬────────────────────────┘ │ DATABASE │ "email" TEXT UNIQUE
│ │ │ );
└ 데이터베이스 스키마 가져오기 -----> │ │
┌ Drizzle 스키마 생성 <----- │ │
│ TypeScript 파일 생성 └────────────────────────┘
│
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 옵션으로 직접 전달할 수 있습니다.
// 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
📦 <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
라는 두 개의 설정 파일을 사용하여 개발 환경과 프로덕션 환경을 구분할 수 있습니다. 이렇게 하면 각 환경에 맞는 설정을 쉽게 관리할 수 있습니다.
데이터베이스 드라이버 지정하기
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 : {
// 메모리 내
url : ":memory:"
// 또는 데이터베이스 폴더
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
에게 postgis 확장 기능이 설치되어 있음을 알려줍니다.
이 확장 기능은 public
스키마에 자체 테이블을 생성하므로, 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-kit
설정은 drizzle.config.ts 파일을 통해 구성하는 것을 권장합니다. 하지만 CI/CD 파이프라인 등에서 필요할 경우, 모든 설정 옵션을 커맨드라인을 통해 제공할 수도 있습니다.
dialect
필수
데이터베이스 방언, ---
dialects : [ 'postgresql' , 'mysql' , 'sqlite' , 'turso' , 'singlestore' ]
---
{frontmatter.dialects.map(dialect => <><code>{dialect}</code> </>)}
위 코드는 frontmatter.dialects
배열에 있는 각 데이터베이스 방언(dialect)을 순회하며 <code>
태그로 감싸고, 각 항목 뒤에 공백을 추가하는 코드입니다. 이렇게 하면 각 방언 이름이 코드 형식으로 표시되고, 항목 사이에 공백이 생깁니다.
중 하나 driver
드라이버 예외 drivers : [ 'aws-data-api' , 'd1-http' , 'pglight' ]
{ frontmatter . drivers .map ((driver) => <>< code >{driver}</ code > </>)}
위 코드는 drivers
배열에 있는 각 드라이버를 순회하며, 각 드라이버 이름을 <code>
태그로 감싸서 출력합니다.  
는 공백 문자를 나타내며, 각 드라이버 이름 사이에 공백을 추가합니다.
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 --schema=src/schema.ts --url=postgresql://user:password@host:port/dbname
npx drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --driver=pglite url=database/
npx drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --tablesFilter=‘user*’ --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname
yarn drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --url=postgresql://user:password@host:port/dbname
yarn drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --driver=pglite url=database/
yarn drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --tablesFilter=‘user*’ --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname
pnpm drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --url=postgresql://user:password@host:port/dbname
pnpm drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --driver=pglite url=database/
pnpm drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --tablesFilter=‘user*’ --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname
bun drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --url=postgresql://user:password@host:port/dbname
bun drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --driver=pglite url=database/
bun drizzle-kit pull --dialect=postgresql --schema=src/schema.ts --tablesFilter=‘user*’ --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname