Data Migrations#
The Open Data Repository uses Drizzle ORM for database management and migrations. This document outlines our migration system and database schema management approach.
Migration System Overview#
We use Drizzle Kit for handling database migrations, which provides a type-safe and declarative way to manage database schemas in TypeScript.
Key Components#
Schema Definition: Located in
src/db/schemas/
Migration Files: Generated in
drizzle/
directoryConfiguration: Managed via
drizzle.config.ts
Available Commands#
# Pull current database schema
pnpm run db:pull
# Push schema changes to database
pnpm run db:push
# Generate new migration
pnpm run db:generate
# Apply pending migrations
pnpm run db:migrate
# Launch Drizzle Studio UI
pnpm run db:studio
Schema Structure#
Best Practices#
Schema Changes
Always generate migrations for schema changes
Review migration files before applying
Test migrations in development environment first
Naming Conventions
Use snake_case for database objects
Prefix related tables appropriately
Use descriptive but concise names
Version Control
Commit migration files to version control
Include both up and down migrations
Document breaking changes
Migration Workflow#
Development Phase
# Make schema changes in TypeScript files # Generate new migration pnpm run db:generate # Review generated migration # Apply migration pnpm run db:migrate
Testing Phase
Test migrations in development environment
Verify data integrity
Check for breaking changes
Deployment Phase
Back up production database
Apply migrations during maintenance window
Verify application functionality
Troubleshooting#
Common Issues#
Migration Conflicts
Reset development database
Regenerate migrations
Ensure consistent migration history
Schema Sync Issues
Use
db:pull
to verify current stateCompare with version control
Manually resolve conflicts
Performance Concerns
Review index usage
Check migration impact
Consider batching large changes
Getting Help#
For issues with migrations:
Check the Drizzle documentation
Review our issue tracker
Contact the development team
Ask for help in our Discord community here