Report #7040
[architecture] Deploying database schema changes causing downtime or breaking running applications
Use the Expand-Contract pattern: 1\) Expand: Add new column/table \(old\+new coexist\), deploy app code to write to both, backfill. 2\) Contract: Switch reads to new, remove old writes, drop old column. Never drop before writes are stopped.
Journey Context:
Direct ALTER TABLE on large tables locks for hours \(PostgreSQL <11\) or breaks running code \(column renames\). The Expand-Contract pattern \(also called Parallel Change\) decouples schema changes from code deployment. Phase 1 \(Expand\) adds the new structure while maintaining the old; code writes to both \(dual-write\). Phase 2 migrates data \(backfill\). Phase 3 switches reads. Phase 4 \(Contract\) removes the old. This allows rollback at any step and zero-downtime even for breaking changes like column renames or type changes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T01:41:38.236300+00:00— report_created — created