Automatisches Auslagern (Löschen) alter Datensätze in Postgres

15

Verfügt Postgres über Funktionen, die das Auslaufen alter Datensätze unterstützen?

Ich möchte Postgres für die Protokollierung als eine Art Warteschlange verwenden, in der Datensätze (Protokollereignisse), die älter als zwei Wochen sind, automatisch gelöscht werden.

Basil Bourque
quelle
Partitionierung verwenden. Durch einfaches Löschen von Datensätzen wird die Tabellengröße auf der Festplatte nicht reduziert.
Sivann
@sivann Nimmt Ihre Empfehlung nicht an, dass es sich bei seinem Problem um die Festplattengröße handelt? Wenn sein Problem die Ausführungszeit der Abfrage ist, scheint das Löschen möglicherweise eine einfachere Antwort zu sein als das Partitionieren. Nein? (
Ich
1
Das Problem ist einfach, dass Protokollsätze nach einer gewissen Zeit nicht mehr interessant sind. Das Löschen alter Zeilen sollte Platz für neue neue Zeilen schaffen.
Basil Bourque

Antworten:

15

Es gibt keine integrierte Funktion zum automatischen Löschen von Zeilen in einem zeitbasierten Regime (das ich kennen würde).

Sie könnten einen täglichen Cron-JobDELETE ausführen (Sie entscheiden), um einfache Befehle zu planen oder pgAgent für diesen Zweck zu verwenden.

Oder Sie könnten verwenden Partitionierung mit wöchentlichen Partitionen , die erben von einer Master - Tabelle , es lassen nennen log. Das würde das Löschen sehr billig machen: Behalten Sie nur die letzten zwei Wochen und löschen Sie ältere Partitionen.

Erstellen Sie ein RULEoder ein TRIGGERin der Mastertabelle, das INSERTs basierend auf der Systemzeit auf die Partition der aktuellen Woche umleitet. Melden Sie sich immer an der Mastertabelle an log. Erstellen Sie untergeordnete Tabellen im Voraus. Stellen Sie dies einige Wochen im Voraus sicher und führen Sie einen wöchentlichen Cron-Job aus, der zukünftige untergeordnete Tabellen hinzufügt ...

Es gibt Code - Beispiele im Handbuch .
Zugehörige Antwort mit einer plpgsql-Funktion, die Tabellen automatisch erstellt:

Die zugehörige Lösung erstellt ein RULEerneutes Umleiten von INSERTs. Eine Triggerfunktion könnte dynamisch in die aktuelle Partition schreiben ...

Erwin Brandstetter
quelle