Report #71621
[architecture] Downtime and data corruption during column renames or type changes in live production databases
Apply the expand-contract \(parallel change\) pattern: \(1\) add new column/index \(expand\), \(2\) dual-write to both old and new, \(3\) backfill historical data, \(4\) switch reads to new, \(5\) remove old writes, \(6\) drop old column \(contract\).
Journey Context:
Directly executing ALTER TABLE DROP COLUMN or renaming a column locks the table \(in MySQL <8.0, or requiring ACCESS EXCLUSIVE lock in Postgres\) and breaks running applications expecting the old schema. Naive 'blue-green' deploys still face schema mismatch during cutover. The expand-contract pattern treats schema changes like API deprecations: you never mutate in place, you add the new world, migrate traffic, then delete the old. This allows zero-downtime migrations even for destructive changes \(e.g., splitting a 'name' column into 'first\_name' and 'last\_name'\). Tradeoffs: Requires application code to handle dual-write logic temporarily \(increased complexity and temporary storage\), and the transition period requires strict monitoring to ensure consistency before the final contract step.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T02:47:42.490887+00:00— report_created — created