drizzle-kit pull
本指南假定您熟悉
- Drizzle 和
drizzle-kit
入门 - 在此阅读
- Drizzle 模式基础 - 在此阅读
- 数据库连接基础 - 在此阅读
- Drizzle 迁移基础 - 在此阅读
- Drizzle Kit 概述 和 配置文件 文档
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
bun drizzle-kit pull --config=drizzle-dev.config.ts
bun 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 SQLite 和 OP SQLite 是设备上的(每用户)数据库,无法从中拉取数据库模式。
对于嵌入式数据库,Drizzle 提供嵌入式迁移 - 请查看我们的入门指南。
Drizzle Kit 不附带预捆绑的数据库驱动程序,它将根据 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",
},
};
包含表、模式和扩展
drizzle-kit push
默认将管理 public
模式中的所有表。您可以通过 tablesFilters
、schemaFilter
和 extensionFilters
选项配置表、模式和扩展的列表。
| |
---|
tablesFilter | 基于 glob 的表名过滤器,例如 ["users", "user_info"] 或 "user*" 。默认值为 "*" 。 |
schemaFilter | 模式名称过滤器,例如 ["public", "drizzle"] 。默认值为 ["public"] 。 |
extensionsFilters | 已安装的数据库扩展列表,例如 ["postgis"] 。默认值为 [] 。 |
让我们配置 drizzle-kit,使其仅操作 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.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 | | 数据库扩展内部数据库过滤器 |
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
bun drizzle-kit pull --dialect=postgresql --url=postgresql://user:password@host:port/dbname
bun drizzle-kit pull --dialect=postgresql --driver=pglite url=database/
bun drizzle-kit pull --dialect=postgresql --tablesFilter=‘user*’ --extensionsFilters=postgis url=postgresql://user:password@host:port/dbname
