web-dev-qa-db-fra.com

Vieillissement automatique (suppression) des anciens enregistrements dans Postgres

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.

16
Basil Bourque

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 commandes DELETE simples ou utiliser pgAgent à cet effet.

Ou vous pouvez utiliser partitionnement avec des partitions hebdomadaires qui héritent d'une table principale , permet de l'appeler log. Cela rendrait la suppression de très bon marché: il suffit de conserver les deux dernières semaines et de supprimer les anciennes partitions.

Créez un RULE ou un TRIGGER 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 principale log. 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 exemples de code dans le manuel .
Réponse connexe 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 ...

15
Erwin Brandstetter