Report #84900
[architecture] Schema changes \(renaming column, changing type\) cause downtime or data loss
Use the Expand-Contract pattern: 1\) Expand: Add new column/table alongside old \(e.g., add 'email\_new'\), 2\) Dual-write: Write to both old and new in application code, 3\) Backfill: Migrate old data to new in idempotent batches, 4\) Switch reads: Point application to read from new column, 5\) Contract: Stop writing to old column and drop it.
Journey Context:
Directly altering a column \(e.g., ALTER TABLE users RENAME COLUMN email TO email\_address\) locks the table and breaks running queries. Blue-green deployments with DB cutover are complex and risky. The expand-contract pattern allows incremental, reversible changes. The critical insight is maintaining dual-write consistency during the transition: the application must write to both schemas, treating the old as source-of-truth initially, then promoting the new. The backfill must be idempotent \(upsert\) and batched to avoid lock contention. This pattern is database-agnostic but requires application coordination. Tradeoff: It requires multiple deployment cycles to complete a 'simple' rename.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T01:05:44.701485+00:00— report_created — created