drizzle-kit pull
 
This guide assumes familiarity with:
 
- 开始使用 Drizzle 和 drizzle-kit- 阅读这里
- Drizzle 模式基础 - 阅读这里
- 数据库连接基础 - 阅读这里
- Drizzle 迁移基础 - 阅读这里
- Drizzle Kit 概述 以及 配置文件 文档
  
drizzle-kit pull 允许你从现有数据库模式中提取(自省)数据,生成 schema.ts drizzle 模式文件,
它设计用于支持 Drizzle 迁移的 数据库优先 方法。
当你运行 Drizzle Kit 的 pull 命令时,它会:
- 从现有数据库中提取数据库模式(DDL)
- 生成 schema.tsdrizzle 模式文件并将其保存在out文件夹中
                                   ┌────────────────────────┐      ┌─────────────────────────┐ 
                                  │                        │ <---  CREATE TABLE "users" (
┌──────────────────────────┐      │                        │        "id" SERIAL PRIMARY KEY,
│ ~ drizzle-kit pull       │      │                        │        "name" TEXT,
└─┬────────────────────────┘      │        DATABASE        │        "email" TEXT UNIQUE
  │                               │                        │       );
  └ Pull 数据库模式 --------> │                        │
  ┌ 生成 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
      
    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
      
        
📦 <项目根目录>
 ├ 📂 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 自动选择可用的数据库驱动 - 查看讨论。
大多数相同方言的驱动共享相同的连接参数集,
对于像 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"]。默认为[] | 
让我们配置 drizzle-kit 只操作 public 模式中的 所有表,
并告知 drizzle-kit 已安装了 postgis 扩展,
以使其可以忽略在公共模式中创建自己的表。
 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 | 必需 | 数据库方言, 选项之一 postgresqlmysqlsqlitetursosinglestore | 
| driver |  | 驱动程序例外 aws-data-apid1-httppglight | 
| out |  | 迁移输出文件夹路径,默认是 ./drizzle | 
| url |  | 数据库连接字符串 | 
| user |  | 数据库用户 | 
| password |  | 数据库密码 | 
| host |  | 主机 | 
| port |  | 端口 | 
| database |  | 数据库名称 | 
| config |  | 配置文件路径,默认是 drizzle.config.ts | 
| introspect-casing |  | 列、表等中 JS 键创建的策略, preservecamel | 
| 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
      
        
