When the XID wraps, at the moment it does so, unless you set vacuum_freeze_min_age to 0 and a vacuum has just been performed, is there not a chance that there will be some data loss? If it changes value from (2^32 -1) to (0), it's value is going to be less than SOME rows - the ones which have not been "frozen" and whose XID was presumably greater than (relfrozenid) at the time the wrap occurred - and will they not disappear until they too are frozen?