XID wraparound
Identyfikatory transakcji PostgreSQL mają 32 bity i się zawijają. Jeśli nie zdążysz wycofać starych na czas, baza całkowicie przestaje przyjmować zapisy.
Widoczność wiersza zależy od tego, czy transakcja, która go utworzyła, była przed twoją, czy po niej, ale licznik cykliczny nie ma absolutnego „przed”: połowa przestrzeni liczy się jako przeszłość, a połowa jako przyszłość. Gdyby stary wiersz przekroczył granicę dwóch miliardów, nagle wyglądałby na pochodzący z przyszłości i stałby się niewidoczny — dlatego autovacuum zamraża stare wiersze, oznaczając je jako trwale widoczne. Jeśli to zaniedbać, serwer zaczyna ostrzegać, a gdy zostaje milion identyfikatorów, blokuje zapisy i żąda uruchomienia vacuum w trybie jednego użytkownika. To jedna z niewielu znanych przyczyn wielodniowych, nieplanowanych przestojów w skądinąd dobrze prowadzonych instalacjach Postgresa.