PostgreSQL

Transaction ID wraparound causes complete write outage

critical
availabilityUpdated 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.