Migration System
Sunschool uses Drizzle ORM for database migrations with automatic application on server startup. FromENGINEERING.md:
Migrations run automatically on startup. Manual commands available for debugging.
Migration folder: drizzle/migrations/ (0000-0008)
How Migrations Work
Migration failures do not block server startup. This prevents downtime from schema issues.
Migration Files
From the repository:Migration Numbering
Migrations are numbered sequentially starting from 0000. Each file contains:- SQL statements to apply schema changes
- Rollback instructions (if reversible)
- Comments explaining the purpose
Manual Migration Commands
Frompackage.json:
Run Migrations
Push Schema Changes
Seed Database
Creating New Migrations
Step 1: Update Schema
Editshared/schema.ts:
Step 2: Generate Migration
Step 3: Review Generated SQL
Step 4: Apply Migration
- Auto (Server Restart)
- Manual
- Production
Migration Best Practices
Idempotent Migrations
Migrations should be idempotent - safe to run multiple times.
Additive Changes
Prefer additive changes over destructive ones.
Backward Compatibility
Maintain backward compatibility during rolling deployments.
Data Migrations
Separate data changes from schema changes:Rollback Strategy
Manual Rollback
Forward migration (0014_add_achievements.sql):Database Backups
- Neon
- Local PostgreSQL
- Railway
Neon provides automatic backups:
- Point-in-time recovery (7 days on Free, 30+ on Pro)
- Access via Neon Console
- Branch from backup for testing
Migration Tracking
Drizzle stores applied migrations in adrizzle_migrations table:
Common Migration Scenarios
Adding a Column
Adding an Index
Modifying a Column
Renaming
Troubleshooting
Migration timeout
Migration timeout
Cause: Large table, slow operation (e.g., adding index).Fix:
Constraint violation
Constraint violation
Cause: Existing data doesn’t meet new constraint.Fix:
Migration already applied
Migration already applied
Cause: Migration ran but wasn’t recorded in tracking table.Fix:
Schema mismatch
Schema mismatch
Cause: Database schema doesn’t match
shared/schema.ts.Fix:Testing Migrations
Local Testing
Staging Environment
Always test migrations in staging before production.
Next Steps
Database Setup
Learn about database configuration
Monitoring
Monitor migration success and failures
Troubleshooting
Debug migration issues