Database Migrations
Managing database schema changes with Prisma Migrate.
Migration Strategy
MACHUPS uses Prisma Migrate for all schema changes:
- Development:
prisma migrate dev- Creates and applies migrations - Production:
prisma migrate deploy- Applies pending migrations - Reset:
prisma migrate reset- Resets database (dev only)
Creating Migrations
# 1. Update prisma/schema.prisma
# 2. Create migration
npx prisma migrate dev --name add_wallet_sessions
# 3. Review generated SQL
cat prisma/migrations/[timestamp]_add_wallet_sessions/migration.sql
# 4. Test migration
npm run test:migration
Migration Workflow
Development Environment
# Create migration from schema changes
npx prisma migrate dev --name descriptive_name
# Prisma will:
# 1. Generate SQL migration file
# 2. Apply migration to database
# 3. Regenerate Prisma Client
Production Deployment
# Apply pending migrations (no client generation)
npx prisma migrate deploy
# Verify migration status
npx prisma migrate status
Best Practices
DO ✅
- Create small, focused migrations
- Test migrations on staging first
- Add descriptive migration names
- Review generated SQL before committing
- Include rollback instructions in comments
DON'T ❌
- Skip migrations and edit schema directly
- Modify existing migration files
- Delete migration files
- Run migrations in production manually
Common Migrations
Adding a Column
model User {
// existing fields...
phoneNumber String? // Add optional phone
}
npx prisma migrate dev --name add_user_phone
Adding an Index
model Brand {
name String
@@index([name]) // Add index
}
Adding a Relation
model Brand {
userId String
user User @relation(fields: [userId], references: [id])
}
Rollback Strategy
Prisma doesn't support automatic rollbacks. Manual process:
- Create reverse migration
- Apply manually
- Update schema.prisma
- Create new migration
-- Example rollback SQL
ALTER TABLE users DROP COLUMN phone_number;
Migration History
View all migrations:
npx prisma migrate status
Output:
Migrations:
20251205_init
20251206_add_wallet_sessions
20251207_add_nft_rarity
...
Troubleshooting
Migration Failed?
# Check status
npx prisma migrate status
# Fix database manually or reset (dev only)
npx prisma migrate reset
# Reapply migrations
npx prisma migrate deploy
Drift Detected?
When database schema doesn't match migrations:
# Generate baseline migration
npx prisma migrate diff \
--from-schema-datamodel prisma/schema.prisma \
--to-schema-datasource prisma/schema.prisma \
--script > fix.sql
Next Steps
- PostgreSQL - Database setup
- Schema - Complete schema reference