Also called: XID wraparound, freeze
In plain English
Every change gets a transaction ID, and that counter is only about 4 billion wide before it loops back to the start. PostgreSQL must “freeze” old rows before the counter catches up to them, or it would lose track of which data is visible. If freezing falls too far behind, the server forces protective vacuums and can eventually refuse writes.
Why it matters
This is a classic emergency: if autovacuum is disabled or starved, you get wraparound warnings and finally a read-only stop. Keeping autovacuum healthy prevents it entirely.
En palabras simples
Cada cambio recibe un ID de transaccion, y ese contador solo llega a unos 4 mil millones antes de volver al inicio. PostgreSQL debe “congelar” las filas viejas antes de que el contador las alcance, o perderia el rastro de que datos son visibles. Si la congelacion se atrasa demasiado, el servidor fuerza vacuums de proteccion y puede llegar a rechazar escrituras.
Por que importa
Es una emergencia clasica: si autovacuum esta desactivado o saturado, aparecen avisos de wraparound y al final una parada de solo lectura. Mantener autovacuum sano lo evita por completo.