Cometi um pequeno erro de cálculo e meu VACUUM FULL acabou enchendo os discos da instância. Consegui liberar espaço suficiente para reiniciar o postgres, mas temo que não seja suficiente para executar VACUUM FULL até a conclusão.
Existe alguma maneira de liberar o espaço usado pela execução VACUUM FULL com falha?
PS: Aqui estão as opções que eu useiVACUUM (FULL, VERBOSE, ANALYZE, INDEX_CLEANUP)
Se
VACUUM (FULL)
falhar, todo o espaço em disco preenchido será liberado.A exceção a essa regra é se o servidor travar durante
VACUUM (FULL)
a execução (o que pode acontecer se você ficar sem espaço em disco). Após uma falha (e recuperação de falha), arquivos órfãos podem ser deixados para trás no disco. Não existe uma maneira simples de se livrar desses arquivos, e você certamente não pode fazê-lo via SQL.Se você conhece o PostgreSQL muito bem, pode descobrir quais arquivos são seguros para excluir, mas corre o risco de corromper seu banco de dados se excluir um arquivo errado.
A única maneira segura que conheço é:
pg_dump
o banco de dadossolte o banco de dados e crie-o novamente (vazio)
restaurar o dump da primeira etapa
O que Laurenz disse.
Mas, citando o manual :
Ou seja, se você emitiu
VACUUM FULL
como superusuário, objetos compartilhados também podem ser afetados e você precisa despejar e restaurar todo o cluster para ter certeza: (pg_dumpall
). (Normalmente, a maior parte dos arquivos zombi estaria localizada no diretório do banco de dados afetado.)Pensei em criar um novo banco de dados baseado no afetado
TEMPLATE
diretamente, o que é muito mais rápido do que um ciclo completo de despejo/restauração. (Requer armazenamento disponível suficiente, é claro). Infelizmente, como isso apenas copia arquivos físicos de um banco de dados, incluiria os arquivos-zombi dos quais você está tentando se livrar.Lembre-se de que você precisa de espaço livre suficiente para um arquivo
pg_dump
. O arquivo de despejo pode ser maior ou menor que o próprio banco de dados. Como você tem problemas com o armazenamento gratuito disponível, considere despejar em um local físico diferente.