PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como listar todas as tabelas com alterações de dados nas últimas 24 horas?


Primeiro considere meu comentário.

Postgres até e incluindo 9.4 não registra por si só os timestamps quando as linhas foram inseridas ou atualizadas.

Existem algumas colunas do sistema nos cabeçalhos das linhas que podem ajudar no trabalho forense. A ordem física das linhas (ctid ) pode ser um indicador se nada mais aconteceu com a mesa desde então. Em casos simples, novas linhas são anexadas ao final físico de uma tabela quando inseridas, então o ctid indica o que foi inserido por último - até que algo mude na tabela. O Postgres é livre para reorganizar a ordem física das linhas à vontade, por exemplo com VACUUM . Qualquer UPDATE também grava uma nova versão de linha, que pode alterar a posição física. A nova versão não precisa estar no final da tabela. O Postgres tenta manter a nova versão da linha na mesma página de dados, se possível (Atualização QUENTE ) ...

Dito isso, aqui está uma consulta simples para obter o valor fisicamente últimas linhas de uma determinada tabela:
SELECT ctid, *
FROM   big
ORDER  BY ctid DESC
LIMIT  10;

Respostas relacionadas no dba.SE com informações detalhadas:

O ID da transação de inserção xmin pode ser útil:

Se você tiver um backup para o banco de dados de teste logo antes do incidente, isso seria seja útil. Restaure o estado antigo para um esquema separado do banco de dados de teste e compare as tabelas ...

Normalmente, eu adiciono um ou dois timestamptz colunas para tabelas importantes para quando a linha foi inserida e/ou quando foi atualizada pela última vez. Isso seria ser tremendamente útil para você agora ...

O que faria também ser ótimo para você:os recursos "temporais" introduzidos no padrão SQL com SQL:2011 . Mas isso ainda não foi implementado no Postgres.
Há uma página no Wiki do Postgres .
Há também uma extensão não oficial no PGXN . Não testei e não sei dizer a que distância.

Postgres 9.5 apresenta um recurso para registrar carimbos de data e hora de confirmação (como @Craig comentou ). Precisa ser ativado manualmente antes de iniciar a gravação.O manual:

E algumas funções para trabalhar com ele.