On Thu, Oct 20, 2016 at 2:50 PM, Pavan Deolasee <pavan.deolasee@gmail.com> wrote: > Actually, if we could add an API which can truncate FSM to the given heap > block, then the user may not even need to run VACUUM, which could be costly > for very large tables.
FreeSpaceMapTruncateRel()?
Right. We need a SQL callable function to invoke that.
> Also, AFAICS we will need to backport > pg_truncate_visibility_map() to older releases because unless the VM is > truncated along with the FSM, VACUUM may not scan all pages and the FSM for > those pages won't be recorded.
This would need a careful lookup, and it would not be that complicated to implement. And this bug justifies the presence of a tool like that actually... But usually those don't get a backpatch, so the probability of getting that backported is low IMO, personally I am not sure I like that either.
Just to clarify, I meant if we truncate the entire FSM then we'll need API to truncate VM as well so that VACUUM rebuilds everything completely. OTOH if we provide a function just to truncate FSM to match the size of the table, then we don't need to rebuild the FSM. So that's probably a better way to handle FSM corruption, as far as this particular issue is concerned.