Eu tenho uma tabela enorme que não consigo excluir as linhas, apenas atualizar as colunas que estão armazenando dados enormes em base64, que devo atualizar para null para tentar liberar espaço.
Então programei um script que é capaz de colocar todas as imagens em base64 esperando que o espaço seja liberado após o Vacuum!
As imagens estão definidas como null , vacuo executado, mas a tabela ainda está exatamente do mesmo tamanho, e tenho certeza que o espaço deve ser liberado imediatamente, então o que estou fazendo de errado?
O vácuo completo será capaz de liberar espaço de dados varchar enormes que atualizei para nulo? (Porque precisarei trancar a mesa se fizer isso e preciso ter certeza)
O tamanho do despejo diminuiu 10 vezes, portanto, espero um comportamento semelhante no tamanho do banco de dados.
Resposta curta - Sim.
Ao atualizar linhas, você cria uma nova versão de cada linha mantida dentro da tabela.
Isso torna o espaço ocupado por essas linhas "mortas" disponível para reutilização, mas isso não reduz o tamanho geral.
É isso que libera espaço de volta para o sistema operacional.
E sim; a mesa ficará bloqueada enquanto isso estiver acontecendo.
Veja a página do PostgreSQL Wiki em "Vacuum Full".