XID wraparound
Los ID de transacción de PostgreSQL son de 32 bits y dan la vuelta. Si no se retiran los antiguos a tiempo, la base de datos deja de aceptar escrituras por completo.
La visibilidad de una fila depende de si la transacción que la creó quedó antes o después de la tuya, pero un contador circular no tiene un "antes" absoluto: la mitad del espacio cuenta como pasado y la mitad como futuro. Si una fila antigua cruza el límite de los dos mil millones, de pronto parecería venir del futuro y se volvería invisible — por eso autovacuum congela las filas antiguas, marcándolas como visibles para siempre. Si aun así se deja llegar demasiado lejos, el servidor empieza a avisar, y con un millón de ID restantes cierra las escrituras y exige un vacuum en modo monousuario. Es una de las pocas causas conocidas de caídas no planificadas de varios días en instalaciones de Postgres por lo demás bien administradas.