Skip to main content
Strategies for safely changing database schemas in production environments.

Core Principles

Zero Downtime

No-downtime deployment Maintain compatibility

Backward Compatible

Backward compatibility Gradual changes

Rollback Ready

Rollback capability Always prepared

Test First

Test first Staging verification

Zero-Downtime Deployment Patterns

Pattern 1: Expand-Contract

Add new structure → Migrate → Remove old structure Step 1: Expand - Add new column
Step 2: Migrate (Data Migration)
Step 3: Contract - Remove old column
Expand-Contract benefits: - Zero-downtime deployment possible - Rollback possible anytime - No data loss

Pattern 2: Gradual Migration

Avoiding Dangerous Changes

❌ Dangerous: Direct Column Drop

✅ Safe: Gradual Drop

❌ Dangerous: Immediate NOT NULL

✅ Safe: nullable → migration → NOT NULL

Data Type Changes

Safe Type Change Sequence

Index Strategies

Concurrent Index Creation

CONCURRENTLY caveats: - Runs outside transaction - Takes longer - Leaves INVALID index on failure

Index Creation Monitoring

Foreign Key Strategies

Adding FK to Large Tables

NOT VALID + VALIDATE benefits: - Skips existing data validation (fast) - Only validates new data immediately - Full validation later in background

Large Data Migration

Batch Processing

Background Worker

Deployment Strategies

Blue-Green Deployment

Rolling Deployment

Testing Strategies

Migration Testing

Data Migration Testing

Monitoring

Migration Performance Tracking

Long-Running Query Monitoring

Checklist

Before Migration Execution

  • Staging environment test completed
  • Production backup completed
  • Rollback plan established
  • Downtime plan (if needed)
  • Team notification
  • Monitoring prepared

During Migration Execution

  • Error log monitoring
  • Performance metrics check
  • Application health check
  • User feedback check

After Migration Execution

  • Data integrity verification
  • Application functionality test
  • Performance check
  • Documentation update
  • Rollback test (staging)

Real-world Examples

Example 1: Adding Column to Large Table

Example 2: Renaming Column

Next Steps

Creating Migrations

Generate in Sonamu UI

Running Migrations

migrate run command

Rolling Back

Undo changes

How It Works

Understanding auto-generation