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

Responder a