drizzle-kit pull

This guide assumes familiarity with:

drizzle-kit pull lets you literally pull(introspect) your existing database schema and generate schema.ts drizzle schema file, it is designed to cover database first approach of Drizzle migrations.

How it works under the hood?

When you run Drizzle Kit pull command it will:

  1. Pull database schema(DDL) from your existing database
  2. Generate schema.ts drizzle schema file and save it to out folder
                                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” 
                                  β”‚                        β”‚ <---  CREATE TABLE "users" (
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚                        β”‚        `id` int auto_increment primary key,
β”‚ ~ drizzle-kit pull       β”‚      β”‚                        β”‚        `name` varchar(255),
β””β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚        DATABASE        β”‚        `email` varchar(255) unique
  β”‚                               β”‚                        β”‚       );
  β”” Pull datatabase schema -----> β”‚                        β”‚
  β”Œ Generate Drizzle       <----- β”‚                        β”‚
  β”‚ schema TypeScript file        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  β”‚
  v
import * as p from "drizzle-orm/singlestore-core";

export const users = p.singlestoreTable("users", {
  id: p.int().primaryKey().autoincrement(),
  name: p.varchar({ length: 255 }),
  email: p.varchar({ length: 255 }).unique(), 
};

It is a great approach if you need to manage database schema outside of your TypeScript project or you’re using database, which is managed by somebody else.




drizzle-kit pull requires you to specify dialect and either database connection url or user:password@host:port/db params, you can provide them either via drizzle.config.ts config file or via CLI options:

With config file
With CLI options
// drizzle.config.ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "singlestore",
  dbCredentials: {
    url: "mysql://user:password@host:3306/dbname",
  },
});
npx drizzle-kit pull

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:

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

Specifying database driver

Drizzle Kit does not come with a pre-bundled database driver, it will automatically pick an available SingleStore driver from your current project based on dialect: "singlestore" - see discussion.

SingleStore uses MySQL-compatible connection parameters, so you usually only need to provide dbCredentials.

Initial pull

WARNING

This feature is available on 1.0.0-beta.2 and higher.

npm
yarn
pnpm
bun
npm i drizzle-orm@rc
npm i drizzle-kit@rc -D

You can use the --init flag to mark the pulled schema as an applied migration in your database, so that all subsequent migrations are diffed against the initial one

npx drizzle-kit push --init

Including tables

drizzle-kit pull will introspect all SingleStore tables by default. You can configure the list of tables via tablesFilter.

tablesFilterglob based table names filter, e.g. ["users", "user_info"] or "user*". Default is "*"

Let’s configure drizzle-kit to introspect all tables in the connected SingleStore database.

drizzle.config.ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "singlestore",
  dbCredentials: {
    url: "mysql://user:password@host:3306/dbname",
  },
  tablesFilter: ["*"],
});
npx drizzle-kit pull

Extended list of configurations

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 postgresql mysql sqlite turso singlestore mssql cockroach
outMigrations output folder path, default is ./drizzle
urlDatabase connection string
userDatabase user
passwordDatabase password
hostHost
portPort
databaseDatabase name
configConfiguration file path, default is drizzle.config.ts
introspect-casingStrategy for JS keys creation in columns, tables, etc. preserve camel
tablesFilterTable name filter
npm
yarn
pnpm
bun
npx drizzle-kit pull --dialect=singlestore --url=mysql://user:password@host:3306/dbname
npx drizzle-kit pull --dialect=singlestore --tablesFilter=β€˜user*’ url=mysql://user:password@host:3306/dbname