src/content/docs/drizzle-kit-migrate.mdx
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";
drizzle-kit migratedrizzle-kit migrate lets you apply SQL migrations generated by drizzle-kit generate.
It's designed to cover code first(option 3) approach of managing Drizzle migrations.
drizzle-kit migrate command requires you to specify both dialect and database connection credentials,
you can provide them either via drizzle.config.ts config file or via CLI options
<CodeTabs items={["With config file", "As CLI options"]}>
<Section> ```ts {5,8} // drizzle.config.ts import { defineConfig } from "drizzle-kit";export default defineConfig({ dialect: "postgresql", schema: "./src/schema.ts", dbCredentials: { url: "postgresql://user:password@host:port/dbname" }, });
```shell
npx drizzle-kit migrate
Upon running migrations Drizzle Kit will persist records about successfully applied migrations in your database.
It will store them in migrations log table named __drizzle_migrations.
You can customise both table and schema(PostgreSQL only) of that table via drizzle config file:
export default defineConfig({
dialect: "postgresql",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname"
},
migrations: {
table: 'my-migrations-table', // `__drizzle_migrations` by default
schema: 'public', // used in PostgreSQL only, `drizzle` by default
},
});
In case you need migrate command to skip commutativity checks and bypass it, you can use --ignore-conflicts. If there is a situation you want to use it, then
there is a big chance that drizzle-kit didn't check migrations right and it's a bug. Please report us your case, so we can fix it
drizzle-kit migrate --ignore-conflicts
You can have multiple config files in the project, it's very useful when you have multiple database stages or multiple databases on the same project: <Npx> drizzle-kit migrate --config=drizzle-dev.config.ts drizzle-kit migrate --config=drizzle-prod.config.ts </Npx>
📦 <project root>
├ 📂 drizzle
├ 📂 src
├ 📜 .env
├ 📜 drizzle-dev.config.ts
├ 📜 drizzle-prod.config.ts
├ 📜 package.json
└ 📜 tsconfig.json
Let's generate SQL migration and apply it to our database using drizzle-kit generate and drizzle-kit migrate commands
📦 <project root>
├ 📂 drizzle
├ 📂 src
│ ├ 📜 schema.ts
│ └ 📜 index.ts
├ 📜 drizzle.config.ts
└ …
<CodeTabs items={["drizzle.config.ts", "src/schema.ts"]}>
import { defineConfig } from "drizzle-kit";
export default defineConfig({
dialect: "postgresql",
schema: "./src/schema.ts",
dbCredentials: {
url: "postgresql://user:password@host:port/dbname"
},
migrations: {
table: 'journal',
schema: 'drizzle',
},
});
import * as p from "drizzle-orm/pg-core";
export const users = p.pgTable("users", {
id: p.serial().primaryKey(),
name: p.text(),
})
Now let's run
npx drizzle-kit generate --name=init
it will generate
<Section> ```plaintext {5} 📦 <project root> ├ … ├ 📂 migrations │ ├ 📂 20242409125510_init └ … ``` ```sql -- ./drizzle/0000_init.sqlCREATE TABLE "users"( id serial primary key, name text )
</Section>
Now let's run
```shell
npx drizzle-kit migrate
and our SQL migration is now successfully applied to the database ✅