sql >> Databasteknik >  >> RDS >> PostgreSQL

postgresql radera partitionstabeller

För alla som hamnar här och letar efter hur man tar bort tabellpartitionerna i PostgreSQL, här är det moderna svaret.

Lösningen är att inte använda en DELETE-sats eftersom det tar bort data utan att ta bort motsvarande tabellpartitioner som innehöll data. OP frågade om hantering av partitionstabeller, inte radering av poster, så alla lösningar som använder DELETE-satser lägger till onödiga databaskostnader för borttagning av poster, lämnar tomma partitionstabeller på plats och ignorerar helt en av de primära fördelarna med att använda partitionering; Släpp bordet när det inte längre är användbart.

I det här fallet måste lösningen vara att SLAPPA den partitionstabell som inte längre behövs. Jag har skrivit en lösning för att lösa det här problemet i min produktionsmiljö, svaret är här .

För att lösa OP:s problem kan funktionen jag skrev användas med två små ändringar för att ändra fullständiga tabellnamnet variabel och datumformat. Variabelraden fullTablename måste ändras från

fullTablename := base_table_name || '_' || to_char(startTime, dateFormat);

till formatet ÅÅÅÅ-MM-DD_log så här

fullTablename := to_char(startTime, dateFormat) || '_' || base_table_name;

Då måste datumformatet ändras något från

WHEN partition_plan='day'   THEN 'YYYYDDD'

till den angivna tabellnamnkonventionen

WHEN partition_plan='day'   THEN 'YYYY-MM-DD'

Sedan kan SQL-frågan som anropar funktionen för att utföra rensningen anropas från ett dagligt underhållsskript så här:

SELECT public.drop_partitions(current_date-180, 'public', 'log', 5, 'day');

Vilket släpper YYYY-MM-DD_log-tabellerna som är 5 dagar äldre än 180 dagar sedan. För en första körning för att ta bort dussintals eller hundratals gamla tabellpartitioner, 5 kan ställas in på ett mycket högre värde som ger önskad effekt.



  1. Hur man skickar flera variabler till PHP med jQuery

  2. Hitta värdnamnet och porten med PSQL-kommandon

  3. Arbeta med BLOB-objekt i Oracle

  4. Vad våra kunder förtjänar:Vi introducerar MariaDB Enterprise Documentation