Overview
Drizzle provides a robust migration system that generates SQL migration files from your schema changes. Migrations ensure your database schema stays in sync with your code across environments.Setup
Install Drizzle Kit
Drizzle Kit is the CLI companion for managing migrations:Configuration File
Create adrizzle.config.ts file in your project root:
Generating Migrations
Generate Migration
After modifying your schema, generate a migration:Migration Files
Generated SQL files contain the DDL statements:drizzle/0001_add_users_table.sql
Running Migrations
Programmatic Migration
Run migrations from your application code:migrate.ts
Migration Using Drizzle Kit
Alternatively, use Drizzle Kit directly:Migration Configuration
Custom Migration Table
Configure the migrations tracking table:Multiple Schema Directories
drizzle.config.ts
Migration Workflows
Development Workflow
1
Modify schema
Update your schema files with new tables, columns, or constraints:
schema.ts
2
Generate migration
3
Run migration
4
Commit changes
Commit both schema changes and migration files:
Production Deployment
1
Test migrations
Run migrations in a staging environment first:
2
Backup database
Always backup your production database before running migrations:
3
Run migrations
Execute migrations during deployment:
4
Verify
Verify the migration succeeded:
Introspection
Pull from Database
Generate schema from an existing database:Push to Database
Quickly push schema changes without generating migration files (development only):Custom Migrations
Manual SQL
Create custom migration files for complex changes:drizzle/0003_custom.sql
Breaking Point Notation
For queries that must run separately:Migration Metadata
Journal File
The_journal.json tracks migration history:
drizzle/meta/_journal.json
Snapshot Files
Snapshot files store the schema state at each migration:drizzle/meta/0001_snapshot.json
Common Patterns
Adding Columns
Renaming Columns
Drizzle Kit detects renames by comparing snapshots:Adding Indexes
Changing Column Types
Best Practices
- Version control: Always commit migration files with schema changes
- Review migrations: Check generated SQL before running in production
- Incremental changes: Make small, focused schema changes
- Backup first: Always backup production before migrations
- Test thoroughly: Run migrations in staging before production
- Avoid
push: Use migrations in production, notdrizzle-kit push
Troubleshooting
Migration Conflicts
If team members generate migrations simultaneously:- Pull latest migrations from version control
- Regenerate your migration:
npx drizzle-kit generate - Resolve any conflicts in the schema files
- Commit both schema and new migrations
Failed Migrations
If a migration fails midway:- Check the error message
- Fix the issue (schema or database state)
- Consider using transactions to ensure atomicity
- For PostgreSQL/SQLite, migrations run in transactions by default
Rollback
Drizzle doesn’t auto-generate rollback migrations. Create manual down migrations:drizzle/0001_rollback.sql
Next Steps
Transactions
Learn about atomic database operations
Schema Declaration
Review schema definition patterns