配置文件

Drizzle Kit 允许您在 TypeScriptJavaScriptJSON 配置文件中声明配置。

您可以拥有自动补全体验和非常方便的环境变量流程!

📦 <project root>
 ├ ...
 ├ 📂 drizzle
 ├ 📂 src
 ├ 📜 drizzle.config.ts
 └ 📜 package.json
drizzle.config.ts
drizzle.config.js
drizzle.config.json
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql", // "mysql" | "sqlite" | "postgresql"
  schema: "./src/schema.ts",
  out: "./drizzle",
});
import type { Config } from "drizzle-kit";

/** @type { import("drizzle-kit").Config } */
export default {
  dialect: "postgresql", // "mysql" | "sqlite" | "postgresql"
  schema: "./src/schema.ts",
  out: "./drizzle",
};
{
  "dialect": "postgresql",
  "schema": "./src/schema.ts",
  "out": "./drizzle",
}

架构文件路径

schema 参数允许您定义架构文件的位置。

您可以拥有任意数量的独立的架构文件,并使用**glob**语法或 glob 数组语法定义路径。

示例 1
示例 2
示例 3
📦 <project root>
 ├ ...
 ├ 📂 drizzle
 ├ 📂 src
 │ ├ ...
 │ ├ 📜 index.ts
 │ └ 📜 schema.ts 
 ├ 📜 drizzle.config.ts
 └ 📜 package.json
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./src/schema.ts",
});
📦 <project root>
 ├ ...
 ├ 📂 drizzle
 ├ 📂 src
 │ ├ 📂 user
 │ │ ├ 📜 handler.ts 
 │ │ └ 📜 schema.ts 
 │ ├ 📂 posts
 │ │ ├ 📜 handler.ts 
 │ │ └ 📜 schema.ts 
 │ └ 📜 index.ts
 ├ 📜 drizzle.config.ts
 └ 📜 package.json
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./src/**/schema.ts",
  //or
  schema: ["./src/user/schema.ts", "./src/posts/schema.ts"]
});
📦 <project root>
 ├ ...
 ├ 📂 drizzle
 ├ 📂 src
 │ ├ 📂 schema
 │ │ ├ 📜 user.ts 
 │ │ ├ 📜 post.ts 
 │ │ └ 📜 comment.ts 
 │ └ 📜 index.ts
 ├ 📜 drizzle.config.ts
 └ 📜 package.json
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./src/schema/*",
});

迁移文件夹

out 参数允许您定义迁移的文件夹,默认为 drizzle

非常有用,因为您可以在同一个项目中为不同的数据库拥有多个独立的架构,并为它们定义不同的迁移文件夹。

迁移文件夹包含 .sql 迁移文件和 _meta 文件夹,由 drizzle-kit 使用。

⚠️

请勿手动删除任何文件,请参考 drizzle-kit drop 命令

📦 <project root>
 ├ ...
 ├ 📂 drizzle
 │ ├ 📂 _meta
 │ ├ 📜 user.ts 
 │ ├ 📜 post.ts 
 │ └ 📜 comment.ts 
 ├ 📂 src
 ├ 📜 drizzle.config.ts
 └ 📜 package.json
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql", // "mysql" | "sqlite" | "postgresql"
  schema: "./src/schema/*",
  out: "./drizzle",
});

SQL 断点

breakpoints 参数允许您在生成的迁移中启用/禁用 SQL 语句断点。

它是可选的,默认为 true, 它对于在不支持一次事务中的多个 DDL 变更语句的数据库(如 MySQL,SQLite)上正确应用迁移是必要的, Drizzle ORM 必须按顺序逐个应用它们。

CREATE TABLE `book` (
  `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
  `name` text
);
--> statement-breakpoint
CREATE TABLE `book_to_author` (
  `author_id` integer,
  `book_id` integer,
  PRIMARY KEY(`book_id`, `author_id`)
);

推送和拉取

Drizzle Kit 提供了 introspectpush API。

我们镜像了数据库驱动程序的连接参数。

连接 URI
连接参数
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql", // "mysql" | "sqlite" | "postgresql"
  schema: "./src/schema/*",
  out: "./drizzle",
  dbCredentials: {
    url: process.env.DB_URL,
  }
});
ℹ️

使用 PlanetScale 驱动程序时,您的连接字符串必须以 ?ssl={"rejectUnauthorized":true} 结尾,而不是 ?sslaccept=strict

import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./src/schema/*",
  out: "./drizzle",
  dialect: "postgresql", // "mysql" | "sqlite" | "postgresql"
  dbCredentials: {
    user: "postgres",
    password: process.env.DATABASE_PASSWORD,
    host: "127.0.0.1",
    port: 5432,
    database: "db",
  }
});

多项目架构

tablesFilter 参数对于 db push 命令,可以使用 glob 语法来过滤表。当您只有一个数据库可用于多个具有独立 SQL 架构的分离项目时,这非常有用。

如何使用 Drizzle ORM 定义多项目表 — 请参阅 这里。

import { serial, text, pgTableCreator } from 'drizzle-orm/pg-core';

const pgTable = pgTableCreator((name) => `project1_${name}`);

const users = pgTable('users', {
  id: serial('id').primaryKey(),
  name: text('name').notNull(),
});
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./src/schema/*",
  out: "./drizzle",
  dialect: "mysql", // "mysql" | "sqlite" | "postgresql"
  dbCredentials: {
    url: process.env.DATABASE_URL,
  }
  tablesFilter: ["project1_*"],
});

您可以应用多个 or 过滤器:

tablesFilter: ["project1_*", "project2_*"]
Become a Gold Sponsor