PostgreSQL transaction IDs are a countdown, not a disk-usage gauge. Every transaction that needs an XID advances a 32-bit counter. Vacuum protects old row versions by freezing them, but a database whose oldest unfrozen XID keeps aging can eventually refuse commands that assign new XIDs rather than ...