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.
postgresql
delete
queue
Basil Bourque
quelle
quelle
Antworten:
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-Job
DELETE
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
RULE
oder einTRIGGER
in der Mastertabelle, das INSERTs basierend auf der Systemzeit auf die Partition der aktuellen Woche umleitet. Melden Sie sich immer an der Mastertabelle anlog
. 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
RULE
erneutes Umleiten von INSERTs. Eine Triggerfunktion könnte dynamisch in die aktuelle Partition schreiben ...quelle