Transaction ID wraparound causes complete write outage
criticalavailabilityUpdated Feb 13, 2026
Technologies:
How to detect:
When relfrozenxid age approaches autovacuum_freeze_max_age (default 200,000,000), PostgreSQL blocks all write operations (INSERT, UPDATE, DELETE, DDL) to prevent data corruption from transaction ID reuse. Database becomes read-only.
Recommended action:
Check transaction ID age with: SELECT relname, age(relfrozenxid) FROM pg_class WHERE relkind = 'r' ORDER BY age(relfrozenxid) DESC. Terminate long-running/idle transactions holding old snapshots. Run aggressive VACUUM FREEZE on affected tables. Monitor age(relfrozenxid) against autovacuum_freeze_max_age threshold.