I have just noticed that VACUUM doesn't always call FlushRelationBuffers(); it does so only if it wants to truncate the relation (ie, shrink the physical file). This is OK for normal purposes but it's bad for pg_upgrade, which is invoking VACUUM just to ensure that on-row transaction status bits are set correctly. Without FlushRelationBuffers(), pages that only had status bit updates may never get written back to disk... I have fixed VACUUM so that FlushRelationBuffers() will be called in all execution paths, and back-patched the fix into REL7_0 branch. This looks like another good reason for a 7.0.3 release :-( regards, tom lane