Eu tenho um aplicativo da web Django com back-end postgresql 9.3.10 (sentado em um sistema operacional Linux). Corri para o erro de disco cheio, de modo que, mesmo se eu tentar truncar uma tabela, recebo erros do tipo:
ERROR: could not extend file "base/30137/33186048": No space left on device
HINT: Check free disk space.
Não posso adicionar facilmente mais espaço em disco ao servidor, nem excluir coisas nesta VM. No entanto, existem várias tabelas candidatas a truncamento, mas parece que também não posso truncá-las agora.
Alguém pode me dar conselhos sobre o que posso fazer aqui? Isso está afetando bastante meu servidor de produção, e eu sou um DBA acidental aqui, tão totalmente perplexo.
postgresql
postgresql-9.3
Hassan Baig
fonte
fonte
Respostas:
Como o PostgreSQL deve escrever o WAL antes de fazer alterações nas tabelas, ele precisa de espaço livre em disco para excluir as coisas e liberar mais espaço em disco.
Se você deixar o disco encher, não poderá se recuperar no PostgreSQL. Mesmo
TRUNCATE
ainda tem que escrever para o WAL.Portanto, você deve liberar espaço no volume ou expandir o volume. Se os arquivos de log do PostgreSQL estiverem no
pg_log
diretório de dados, você poderá remover com segurança alguns deles e reiniciar a página.Você não exclua
pg_xlog
oupg_clog
. Esses não são logs de erro do servidor, são partes críticas do banco de dados, do log de transações e do commit.fonte
TRUNCATE
tem que escrever para wal e como é essa entrada no WAL?rm -rf /tmp/*
ou excluir seu vimrc.rm -rf /tmp/*
... que também pode excluir coisas que você pode querer, como soquetes de aplicativos etc. É melhor ser mais seletivo. Quanto espaço necessário, você está certo, é mínima - um 8k mesa vazia + alguns kb de entradas WAL para o truncado, alocação XID, cometer registro, etc.