Report #93470
[architecture] Destructive schema changes \(renaming columns, changing types\) causing downtime or data loss during deployment
Use the Expand/Contract \(Parallel Change\) pattern: 1\) Expand \(add new column, write to both old and new\), 2\) Backfill data, 3\) Switch reads to new column, 4\) Contract \(remove old column\). Never rename in place.
Journey Context:
Direct ALTER TABLE on high-traffic tables locks the table, causing downtime. Renaming a column instantly breaks running application code. Blue-green deployments fail if the schema is incompatible between versions. The Expand/Contract pattern treats schema like an API: maintain backward compatibility through multiple deploys. Example: renaming 'username' to 'handle'. Step 1: Add 'handle' \(nullable\). Step 2: Deploy code writing to both columns. Step 3: Backfill 'handle' for old rows. Step 4: Switch reads to 'handle'. Step 5: Stop writing to 'username'. Step 6: Drop 'username'. This requires 3-4 deploys but ensures zero downtime. The wrong approach is a single 'ALTER TABLE RENAME COLUMN' during a 'maintenance window'.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T15:28:38.681108+00:00— report_created — created