O Postgres possui algum recurso para oferecer suporte a registros antigos antigos?
Desejo usar o Postgres para registrar, como uma espécie de fila, em que os registros (eventos de log) com mais de duas semanas são excluídos automaticamente.
O Postgres possui algum recurso para oferecer suporte a registros antigos antigos?
Desejo usar o Postgres para registrar, como uma espécie de fila, em que os registros (eventos de log) com mais de duas semanas são excluídos automaticamente.
Respostas:
Não há nenhum recurso incorporado para excluir linhas automaticamente em um regime baseado em tempo (que eu saberia).
Você pode executar um cron-job diário (você decide) para agendar DELETE
comandos simples ou usar o pgAgent para essa finalidade.
Ou você pode usar o particionamento com partições semanais que herdam de uma tabela mestre , vamos chamá-lo log
. Isso tornaria a exclusão muito barata : mantenha as últimas duas semanas e descarte as partições mais antigas.
Crie um RULE
ou um TRIGGER
na tabela mestre que redireciona INSERTs para a partição da semana atual com base na hora do sistema. Sempre faça logon na tabela mestre log
. Crie tabelas filho antecipadamente. Faça isso várias semanas antes para ter certeza e execute um trabalho semanal do cron que inclua futuras tabelas filho ...
Existem exemplos de código no manual .
Resposta relacionada com uma função plpgsql criando tabelas automaticamente:
A solução relacionada recria a RULE
para redirecionar INSERTs. Uma função de disparo pode gravar dinamicamente na partição atual ...