Bom dia pessoal.
Em um artigo da DevMedia sobre Vacuum é dito o seguinte.
" Quando realizamos um UPDATE o registro propriamente dito não é
alterado; é incluído um novo registro clone. Sendo assim, o PostgreSQL
marca o registro "original" (antigo) como expirado e realiza a alteração
no clone. Se for um DELETE, o PostgreSQL apenas marca o registro
deletado como expirado."
Então minha dúvida é...
Há possibilidade de recuperar esse registro "expirado"?
Sim. Você tem que conhecer um pouco sobre como funciona o PostgreSQL por
dentro pra conseguir.
Os limitadores seriam que você fizesse isso antes de um (auto)vacuum e a
consequente reutilização do espaço utilizado pela tupla expirada por uma
nova. Existem também diferenças entre um update e um hot-update a partir
da versão 8.3.
Recomendo que você se informe sobre o funcionamento do MVCC e as colunas
"escondidas" do PostgreSQL que guardam os números de transação e
controlam a visibilidade das tuplas, assim como o mecanismo de freeze e
as mudanças que afetam uma tabela inteira para lidar com o retorno a
zero do contador de transações.
Antes que pergunte, não, não há (ou pelo menos não conheço) uma
ferramenta que faça isso (existia em versões muuuuuuito antigas uma
ferramenta proprietária que o fazia) e não, não há um script ou fórmula
mágica, pois depende de cada caso.
Leia mais em: Otimização – Uma Ferramenta Chamada Vacuum
http://www.devmedia.com.br/otimizacao-uma-ferramenta-chamada-vacuum/1710#ixzz32RHQBkdi
Eu não sei quando esse artigo foi escrito, já faz alguns bons anos que
temos o autovacuum e não precisamos (na maioria dos casos) nos preocupar
com execuções manuais ou agendadas de vacuum. Até porque, vacuum não é
uma ferramenta, é um comando e funcionalidade interna do PostgreSQL.
[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral