Für alle, die hier landen und suchen, wie man die Tabellenpartitionen in PostgreSQL löscht, hier ist die moderne Antwort.
Die Lösung besteht darin, keine DELETE-Anweisung zu verwenden, da dies die Daten löscht, ohne die entsprechenden Tabellenpartitionen zu löschen, die die Daten enthielten. Das OP fragte nach dem Verwalten von Partitionstabellen und nicht dem Löschen von Datensätzen, sodass jede Lösung, die DELETE-Anweisungen verwendet, unnötigen Datenbank-Overhead durch das Löschen von Datensätzen hinzufügt, leere Partitionstabellen an Ort und Stelle lässt und einen der Hauptvorteile der Verwendung der Partitionierung vollständig ignoriert. DROP den Tisch, wenn er nicht mehr nützlich ist.
In diesem Fall muss die Lösung darin bestehen, die nicht mehr benötigte Partitionstabelle zu löschen. Ich habe eine Lösung geschrieben, um dieses Problem in meiner Produktionsumgebung zu lösen, die Antwort lautet hier .
Um das Problem des OP zu lösen, kann die von mir geschriebene Funktion mit zwei geringfügigen Überarbeitungen verwendet werden, um den fullTablename zu ändern Variable und das Datumsformat. Die Zeile der Variablen fullTablename muss geändert werden von
fullTablename := base_table_name || '_' || to_char(startTime, dateFormat);
in das JJJJ-MM-TT_log-Format wie folgt
fullTablename := to_char(startTime, dateFormat) || '_' || base_table_name;
Dann muss das Datumsformat leicht von
geändert werdenWHEN partition_plan='day' THEN 'YYYYDDD'
der angegebenen Tabellennamenskonvention
WHEN partition_plan='day' THEN 'YYYY-MM-DD'
Dann kann die SQL-Abfrage, die die Funktion zum Ausführen der Bereinigung aufruft, von einem täglichen Wartungsskript wie folgt aufgerufen werden:
SELECT public.drop_partitions(current_date-180, 'public', 'log', 5, 'day');
Dadurch werden die YYYY-MM-DD_log-Tabellen gelöscht, die 5 sind Tage älter als 180 Vor Tagen. Für einen ersten Lauf, um Dutzende oder Hunderte alter Tabellenpartitionen zu löschen, ist die Datei 5 kann auf einen viel höheren Wert eingestellt werden, der den gewünschten Effekt erzielt.