drizzle-kit pull

本指南假定您熟悉

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 pull 要求您指定 dialect 和数据库连接 urluser: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

指定数据库驱动程序

重要提示

Expo SQLiteOP SQLite 是设备上的(每用户)数据库,无法从中拉取数据库模式。
对于嵌入式数据库,Drizzle 提供嵌入式迁移 - 请查看我们的入门指南。

Drizzle Kit 不附带预捆绑的数据库驱动程序,它将根据 dialect 自动从您当前的项目中选择可用的数据库驱动程序 - 查看讨论

大多数相同方言的驱动程序共享相同的连接参数集,但对于 aws-data-apipglightd1-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",
  },
};

包含表、模式和扩展

drizzle-kit push 默认将管理 public 模式中的所有表。您可以通过 tablesFiltersschemaFilterextensionFilters 选项配置表、模式和扩展的列表。

tablesFilter基于 glob 的表名过滤器,例如 ["users", "user_info"]"user*"。默认值为 "*"
schemaFilter模式名称过滤器,例如 ["public", "drizzle"]。默认值为 ["public"]
extensionsFilters已安装的数据库扩展列表,例如 ["postgis"]。默认值为 []

让我们配置 drizzle-kit,使其仅操作 public 模式中的所有表,并让 drizzle-kit 知道已安装了 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,但在必要时,您也可以通过 CLI 提供所有配置选项,例如在 CI/CD 流水线中。

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数据库扩展内部数据库过滤器
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