packages/db directory.
Configuration
Migration settings are defined indrizzle.config.ts:
packages/db/drizzle.config.ts
Configuration Options
- dialect: Database type (PostgreSQL)
- dbCredentials.url: Connection string from environment variable
- schema: Directory containing schema definitions (
src/schema) - out: Output directory for generated migrations (
drizzle/)
Environment Setup
EnsurePOSTGRES_URL is set in your environment:
.env
@packages/env/db package.
Migration Workflow
1. Generate Migrations
After modifying schema files inpackages/db/src/schema/, generate migration files:
- Builds the
@packages/envdependency - Runs
drizzle-kit generatein thepackages/dbdirectory - Creates SQL migration files in
packages/db/drizzle/
2. Review Generated SQL
Migration files are created inpackages/db/drizzle/ with timestamps:
packages/db/drizzle/0000_initial_schema.sql
3. Apply Migrations
Run migrations against your database:- Builds the
@packages/envdependency - Runs
drizzle-kit migratein thepackages/dbdirectory - Executes all pending migrations
Drizzle Studio
Inspect and modify your database using Drizzle Studio:https://local.drizzle.studio where you can:
- Browse tables and data
- Execute queries
- View relationships
- Edit records
Common Workflows
Adding a New Table
- Define the table in
packages/db/src/schema/:
packages/db/src/schema/posts.ts
- Export from
packages/db/src/schema/index.ts:
packages/db/src/schema/index.ts
- Generate and apply migration:
Modifying Existing Tables
- Update the schema definition:
packages/db/src/schema/auth.ts
- Generate migration:
- Review the generated SQL for ALTER statements
- Apply migration:
Rolling Back Migrations
Drizzle Kit doesn’t have built-in rollback. To revert changes:- Manual SQL: Write and execute reverse migration SQL
- Database restore: Restore from backup
- Delete migration files: Remove migration files and regenerate from schema
Production Migrations
CI/CD Integration
Run migrations in your deployment pipeline:.github/workflows/deploy.yml
Best Practices
- Always review generated SQL before applying migrations
- Test migrations on a staging database first
- Backup production before running migrations
- Use transactions for complex migrations (Drizzle Kit handles this)
- Version control all migration files
- Never modify existing migration files after they’ve been applied
Troubleshooting
Migration Out of Sync
If your database schema doesn’t match your code:Connection Issues
Verify your database connection:Schema Import Errors
The schema uses path aliases (@/schema). Ensure tsconfig.json includes:
packages/db/tsconfig.json
Migration Files Structure
meta/_journal.json file tracks applied migrations and prevents duplicate runs.