drizzle-kit pull
本指南假定您已熟悉:
- 开始使用 Drizzle 和
drizzle-kit - 点此阅读
- Drizzle schema 基础 - 点此阅读
- 数据库连接基础 - 点此阅读
- Drizzle migrations 基础 - 点此阅读
- Drizzle Kit 概览 和 配置文件 文档
drizzle-kit pull 允许你直接拉取(introspect)现有数据库的 schema,并生成 schema.ts drizzle schema 文件,
它旨在覆盖 Drizzle migrations 的 database first 方法。
当你运行 Drizzle Kit pull 命令时,它会:
- 从你现有的数据库中拉取数据库 schema(DDL)
- 生成
schema.ts drizzle schema 文件并将其保存到 out 文件夹
┌────────────────────────┐ ┌─────────────────────────┐
│ │ <--- CREATE TABLE "users" (
┌──────────────────────────┐ │ │ "id" int4 PRIMARY KEY,
│ ~ drizzle-kit pull │ │ │ "name" string,
└─┬────────────────────────┘ │ │ "email" string unique
│ │ DATABASE │ );
│ │ │
└ 拉取数据库 schema -----> │ │
┌ 生成 Drizzle <----- │ │
│ schema TypeScript 文件 └────────────────────────┘
│
v
import * as p from "drizzle-orm/cockroach-core";
export const users = p.cockroachTable("users", {
id: p.int4().primaryKey(),
name: p.string(),
email: p.string(),
},
(table) => [p.uniqueIndex('users_email_key').using('btree', table.email.asc())],
);
如果你需要在 TypeScript 项目之外管理数据库 schema,或者
你正在使用由他人管理的数据库,这是一种很好的方式。
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: "cockroach",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname",
},
});
npx drizzle-kit pull
npx drizzle-kit pull --dialect=cockroach --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
指定数据库驱动
Drizzle Kit 不自带预打包的数据库驱动,
它会根据 dialect 自动从你当前项目中选择可用的数据库驱动 - 查看讨论。
初始 pull
你可以使用 --init 标志将拉取到的 schema 标记为数据库中已应用的 migration,
这样后续所有 migration 都会基于初始 migration 进行 diff
npx drizzle-kit pull --init
包含 tables、schemas 和 extensions
默认情况下,drizzle-kit pull 会管理所有 schema 中的所有表。
你可以通过 tablesFilters、schemaFilter 和 extensionFilters 选项来配置表、schema 和 extensions 列表。
| |
|---|
tablesFilter | 基于 glob 的表名过滤器,例如 ["users", "user_info"] 或 "user*". 默认值为 "*" |
schemaFilter | 基于 glob 的 schema 名称过滤器,例如 ["public", "drizzle"] 或 "drizzle*". 默认值为 "*" |
让我们将 drizzle-kit 配置为仅操作 public schema 中的所有表
并让 drizzle-kit 知道已安装了一个 postgis extension,
该 extension 会在 public schema 中创建自己的表,因此 drizzle 可以忽略它们。
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "cockroach",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname",
},
schemaFilter: ["public"],
tablesFilter: ["*"],
});
npx drizzle-kit pull
扩展配置列表
我们建议通过 drizzle.config.ts 文件来配置 drizzle-kit,
但在必要时你也可以通过 CLI 提供所有配置选项,例如在 CI/CD 流水线等场景中。
| | |
|---|
dialect | required | 数据库方言,取值之一为 postgresql mysql sqlite turso singlestore mssql cockroach |
driver | | 驱动例外 aws-data-api d1-http pglite |
out | | migrations 输出文件夹路径,默认值为 ./drizzle |
url | | 数据库连接字符串 |
user | | 数据库用户 |
password | | 数据库密码 |
host | | 主机 |
port | | 端口 |
database | | 数据库名称 |
config | | 配置文件路径,默认值为 drizzle.config.ts |
introspect-casing | | 用于创建列、表等 JS key 的策略。preserve camel |
tablesFilter | | 表名过滤器 |
schemaFilter | | schema 名称过滤器。默认值:["*"] |
npx drizzle-kit pull --dialect=cockroach --url=postgresql://user:password@host:port/dbname
npx drizzle-kit pull --dialect=cockroach --driver=pglite url=database/
npx drizzle-kit pull --dialect=cockroach --tablesFilter=‘user*’ url=postgresql://user:password@host:port/dbname
yarn drizzle-kit pull --dialect=cockroach --url=postgresql://user:password@host:port/dbname
yarn drizzle-kit pull --dialect=cockroach --driver=pglite url=database/
yarn drizzle-kit pull --dialect=cockroach --tablesFilter=‘user*’ url=postgresql://user:password@host:port/dbname
pnpm drizzle-kit pull --dialect=cockroach --url=postgresql://user:password@host:port/dbname
pnpm drizzle-kit pull --dialect=cockroach --driver=pglite url=database/
pnpm drizzle-kit pull --dialect=cockroach --tablesFilter=‘user*’ url=postgresql://user:password@host:port/dbname
bunx drizzle-kit pull --dialect=cockroach --url=postgresql://user:password@host:port/dbname
bunx drizzle-kit pull --dialect=cockroach --driver=pglite url=database/
bunx drizzle-kit pull --dialect=cockroach --tablesFilter=‘user*’ url=postgresql://user:password@host:port/dbname
