> -- start the VACUUM from the first non-filled block
>
> So if we do this, we wouldn't need to worry about HOT tuples
> at all, nor would we need to wait until all transactions are gone.
You need to wait until you are allowed to truncate if you want
concurrency.
Or a concurrent scan might miss a row, because the visible tuple got
truncated away.
Andreas