Dos documentos :
No PostgreSQL, um UPDATE ou DELETE de uma linha não remove imediatamente a versão antiga da linha [...] Mas, eventualmente, uma versão desatualizada ou excluída da linha não é mais interessante para nenhuma transação. O espaço que ocupa deve então ser recuperado para reutilização por novas linhas, para evitar o crescimento ilimitado dos requisitos de espaço em disco. Isso é feito executando VACUUM .
Quando o vácuo é executado, ele libera eficientemente o espaço ocupado pelas linhas excluídas, reescrevendo todo o bloco, ou a fragmentação do bloco ocorre com novas linhas se encaixando nos 'buracos' disponíveis apenas se forem menores do que a linha excluída que abriu caminho para elas ?
O VACUUM reescreve o bloco inteiro, compactando com eficiência as linhas restantes e deixando um único bloco contíguo de espaço livre (embora esse espaço não seja zerado e o arquivo do disco físico possa conter os restos das linhas excluídas que obviamente não são visíveis para o usuário do banco de dados).
esquema de teste:
conteúdo físico do arquivo de suporte da tabela:
excluir e aspirar:
conteúdo físico do arquivo de suporte da tabela:
inserir nova linha:
conteúdo físico final do arquivo de suporte da tabela:
limpar: