Basicamente, parte de nossa tabela Postgresql é usada para manter os logs de acesso ao servidor e, como tal, às vezes durante a produção, isso pode ficar muito grande. existe alguma maneira de configurar no postgresql para ter um número máximo de registros que uma tabela pode ter e empurrar o registro mais antigo?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Você pode definir um gatilho para manter o número de linha desejado:
Esta provavelmente não é a opção de melhor desempenho, mas quando você atingir o limite, ele nunca será excedido. Se houver espaço para flutuação, você poderá verificar o número da linha periodicamente e excluir as linhas em excesso desde o início.
EDIT: Se você tiver logs realmente grandes (digamos, um milhão por mês), o particionamento pode ser a solução mais fácil. Você pode simplesmente descartar as tabelas desnecessárias (digamos onde
max(timestamp) < CURRENT_DATE - 1 year
). Você pode usar seu carimbo de data/hora (ou uma data derivada) como condição para o particionamento de intervalo .Mas tenha cuidado antes de descartar logs antigos. Tem certeza de que nunca vai precisar deles?
Eu criei uma função independente de tabela mais genérica.
A função recebe 4 parâmetros:
Dessa forma você pode criar quantos triggers quiser chamando a mesma função.
Espero que isto ajude.
Eu criei este procedimento e o executei no PG Agent (ou trabalho do Windows ou trabalho do cron, dependendo). Posso ter mais linhas, isso apenas mantém minha tabela de log não muito grande. Economiza a sobrecarga de um gatilho.