Зацикливание XID
Идентификаторы транзакций PostgreSQL 32-разрядные и переходят через край. Не успеете вовремя «списать» старые — и база полностью перестанет принимать запись.
Видимость строки зависит от того, раньше или позже вашей была транзакция, создавшая её, но у кольцевого счётчика нет абсолютного «раньше»: половина пространства считается прошлым, половина — будущим. Если старая строка перейдёт границу в два миллиарда, она внезапно окажется «из будущего» и станет невидимой, — поэтому autovacuum замораживает старые строки, помечая их навсегда видимыми. Если запустить дело достаточно далеко, сервер начнёт предупреждать, а когда останется миллион идентификаторов, отключит запись и потребует выполнить vacuum в однопользовательском режиме. Это одна из немногих известных причин многодневных внеплановых простоев в других отношениях хорошо управляемых установок Postgres.