drizzle-kit pull
This guide assumes familiarity with:
drizzle-kit pull을 사용하면 기존 데이터베이스 스키마를 그대로 가져와(인트로스펙션) schema.ts Drizzle 스키마 파일을 생성할 수 있으며,
Drizzle 마이그레이션의 데이터베이스 우선 접근 방식을 지원하도록 설계되었습니다.
Drizzle Kit pull 명령어를 실행하면:
- 기존 데이터베이스에서 데이터베이스 스키마(DDL)를 가져옵니다
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 옵션을 통해 제공할 수 있습니다:
// 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",
},
};
초기 풀
WARNING
이 기능은 1.0.0-beta.2 이상에서 사용할 수 있습니다.
npm i drizzle-orm@beta
npm i drizzle-kit@beta -D
yarn add drizzle-orm@beta
yarn add drizzle-kit@beta -D
pnpm add drizzle-orm@beta
pnpm add drizzle-kit@beta -D
bun add drizzle-orm@beta
bun add drizzle-kit@beta -D
--init 플래그를 사용하여 가져온 스키마를 데이터베이스에 적용된 마이그레이션으로 표시할 수 있으며,
이후의 모든 마이그레이션은 초기 스키마를 기준으로 비교됩니다
npx drizzle-kit push --init
테이블, 스키마 및 확장 포함
drizzle-kit push는 기본적으로 public 스키마의 모든 테이블을 관리합니다.
tablesFilters, schemaFilter, extensionFilters 옵션을 통해 테이블, 스키마 및 확장 목록을 구성할 수 있습니다.
| |
|---|
tablesFilter | glob 기반 테이블 이름 필터, 예: ["users", "user_info"] 또는 "user*". 기본값은 "*" |
schemaFilter | glob 기반 스키마 이름 필터, 예: ["public", "drizzle"] 또는 "drizzle*". 기본값은 "*" |
extensionsFilters | 설치된 데이터베이스 확장 목록, 예: ["postgis"]. 기본값은 [] |
drizzle-kit이 public 스키마의 모든 테이블에만 작동하도록 구성하고,
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.config.ts 파일을 통해 drizzle-kit을 구성하는 것을 권장하지만,
필요한 경우(예: CI/CD 파이프라인 등) CLI를 통해 모든 설정 옵션을 제공할 수 있습니다.
| | |
|---|
dialect | required | 데이터베이스 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 | | 데이터베이스 확장 내부 데이터베이스 필터 |
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
