Notes
Locks, durations, and the safe path.
Postgres migration behavior, written down. Every claim here is grounded in documented lock semantics and version-specific behavior — the same knowledge base the rule engine runs on.
-
2026-07-21
Five migrations that pass CI and take down production
Your test database has no rows, and the failure mode of a dangerous migration is duration. That is why CI cannot catch any of these — and what to check instead.
-
2026-07-19
Which lock does your migration actually take?
Four lock modes matter for migrations. The mode tells you who blocks; the duration tells you whether it matters. Plus the lock queue, which causes more outages than either.
-
2026-07-17
The ADD COLUMN DEFAULT that rewrites your table (and the one that doesn't)
Since PG 11 a non-volatile default is catalog-only and instant. A volatile one rewrites every row under ACCESS EXCLUSIVE. And
now()is not volatile.