PG Bug reporting form <noreply@postgresql.org> writes:
> "The internal transaction ID type xid is 32 bits wide and wraps around every
> 4 billion transactions."
> "it is necessary to vacuum every table in every database at least once every
> two billion transactions."
> why Postgresql needs to vacuum in every 2B transactions even though txid
> wraps on every 4 billion transactions (double time)?
Because an XID that's more than 2B transactions in the past will wrap
around and be seen as a bit less than 2B transactions in the future,
causing any rows bearing that XID to become invisible to current
transactions.
regards, tom lane