Back to Drizzle Orm

`drizzle-kit export`

src/content/docs/drizzle-kit-export.mdx

latest5.3 KB
Original Source

import CodeTab from "@mdx/CodeTab.astro"; import CodeTabs from "@mdx/CodeTabs.astro"; import Section from "@mdx/Section.astro"; import Tab from "@mdx/Tab.astro"; import Tabs from "@mdx/Tabs.astro"; import Callout from "@mdx/Callout.astro"; import Prerequisites from "@mdx/Prerequisites.astro" import Npx from "@mdx/Npx.astro"; import SchemaFilePaths from "@mdx/SchemaFilePaths.mdx" import Dialects from "@mdx/Dialects.mdx"

drizzle-kit export

<Prerequisites> - Get started with Drizzle and `drizzle-kit` - [read here](/docs/get-started) - Drizzle schema fundamentals - [read here](/docs/sql-schema-declaration) - Database connection basics - [read here](/docs/connect-overview) - Drizzle migrations fundamentals - [read here](/docs/migrations) - Drizzle Kit [overview](/docs/kit-overview) and [config file](/docs/drizzle-config-file) </Prerequisites>

drizzle-kit export lets you export SQL representation of Drizzle schema and print in console SQL DDL representation on it. <Callout collapsed="How it works under the hood?"> Drizzle Kit export command triggers a sequence of events:

  1. It will read through your Drizzle schema file(s) and compose a json snapshot of your schema
  2. Based on json differences it will generate SQL DDL statements
  3. Output SQL DDL statements to console </Callout>

It's designed to cover codebase first approach of managing Drizzle migrations. You can export the SQL representation of the Drizzle schema, allowing external tools like Atlas to handle all the migrations for you

drizzle-kit export command requires you to provide both dialect and schema path options, you can set them either via drizzle.config.ts config file or via CLI options <CodeTabs items={["With config file", "As CLI options"]}>

<Section> ```ts // drizzle.config.ts import { defineConfig } from "drizzle-kit";

export default defineConfig({ dialect: "postgresql", schema: "./src/schema.ts", });

```shell
npx drizzle-kit export
</Section>
shell
npx drizzle-kit export --dialect=postgresql --schema=./src/schema.ts
</CodeTabs>

Schema files path

You can have a single schema.ts file or as many schema files as you want spread out across the project. Drizzle Kit requires you to specify path(s) to them as a glob via schema configuration option.

<SchemaFilePaths/>

Multiple configuration files in one project

You can have multiple config files in the project, it's very useful when you have multiple database stages or multiple databases or different databases on the same project: <Npx> drizzle-kit export --config=drizzle-dev.config.ts drizzle-kit export --config=drizzle-prod.config.ts </Npx>

plaintext
šŸ“¦ <project root>
 ā”œ šŸ“‚ drizzle
 ā”œ šŸ“‚ src
 ā”œ šŸ“œ .env
 ā”œ šŸ“œ drizzle-dev.config.ts
 ā”œ šŸ“œ drizzle-prod.config.ts
 ā”œ šŸ“œ package.json
 ā”” šŸ“œ tsconfig.json

Extended list of available configurations

drizzle-kit export has a list of cli-only options

<rem025/>
--sqlgenerating SQL representation of Drizzle Schema

By default, Drizzle Kit outputs SQL files, but in the future, we want to support different formats

<rem025/> <Npx> drizzle-kit push --name=init drizzle-kit push --name=seed_users --custom </Npx> <hr/>

We recommend configuring drizzle-kit through drizzle.config.ts file, yet you can provide all configuration options through CLI if necessary, e.g. in CI/CD pipelines, etc.

dialectrequiredDatabase dialect, one of <Dialects/>
schemarequiredPath to typescript schema file(s) or folder(s) with multiple schema files
configConfiguration file path, default is drizzle.config.ts

Example

Example of how to export drizzle schema to console with Drizzle schema located in ./src/schema.ts

We will also place drizzle config file in the configs folder.

Let's create config file:

plaintext
šŸ“¦ <project root>
 ā”œ šŸ“‚ configs
 │ ā”” šŸ“œ drizzle.config.ts
 ā”œ šŸ“‚ src
 │ ā”” šŸ“œ schema.ts
 ā”” …
ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql",
  schema: "./src/schema.ts",
});
ts
import { pgTable, serial, text } from 'drizzle-orm/pg-core'

export const users = pgTable('users', {
	id: serial('id').primaryKey(),
	email: text('email').notNull(),
	name: text('name')
});

Now let's run

shell
npx drizzle-kit export --config=./configs/drizzle.config.ts

And it will successfully output SQL representation of drizzle schema

bash
CREATE TABLE "users" (
        "id" serial PRIMARY KEY NOT NULL,
        "email" text NOT NULL,
        "name" text
);