Postgres dispose-t-il de fonctionnalités pour prendre en charge le vieillissement des anciens enregistrements?
Je veux utiliser Postgres pour la journalisation, comme une sorte de file d'attente, où les enregistrements (événements de journal) de plus de deux semaines sont automatiquement supprimés.
postgresql
delete
queue
Basil Bourque
la source
la source
Réponses:
Il n'y a pas de fonctionnalité intégrée pour supprimer automatiquement les lignes sur un régime basé sur le temps (que je connaisse).
Vous pouvez exécuter un cron-job quotidien (vous décidez) pour planifier des
DELETE
commandes simples ou utiliser pgAgent à cet effet.Ou vous pouvez utiliser le partitionnement avec des partitions hebdomadaires qui héritent d'une table principale , appelons-la
log
. Cela rendrait la suppression très bon marché : conservez simplement les deux dernières semaines et supprimez les anciennes partitions.Créez un
RULE
ou unTRIGGER
sur la table principale qui redirige les INSERT vers la partition de la semaine en cours en fonction de l'heure système. Connectez-vous toujours à la table principalelog
. Créez des tables enfants à l'avance. Assurez-vous que plusieurs semaines à l'avance pour être sûr et exécutez un travail cron hebdomadaire qui ajoute les futures tables enfants ...Il y a des exemples de code dans le manuel .
Réponse associée avec une fonction plpgsql créant automatiquement des tables:
La solution associée recrée un
RULE
pour rediriger les INSERT. Une fonction de déclenchement pourrait écrire dynamiquement sur la partition actuelle ...la source