sql >> Databáze >  >> RDS >> PostgreSQL

postgresql odstranit tabulky oddílů

Pro každého, kdo zde skončí a hledá, jak odstranit oddíly tabulky v PostgreSQL, je zde moderní odpověď.

Řešením není použít příkaz DELETE, protože tím dojde k odstranění dat, aniž by došlo k odstranění odpovídajících oddílů tabulky, které data uchovávaly. OP se zeptal na správu tabulek oddílů, nikoli na mazání záznamů, takže jakékoli řešení využívající příkazy DELETE přidává zbytečnou režii databáze na mazání záznamů, ponechává prázdné tabulky oddílů na místě a zcela ignoruje jednu z primárních výhod používání dělení; Shození stolu, když už není užitečné.

V tomto případě musí být řešením DROP již nepotřebnou tabulku oddílů. Napsal jsem řešení k vyřešení tohoto problému v mém produkčním prostředí, odpověď je zde .

K vyřešení problému OP lze funkci, kterou jsem napsal, použít se dvěma drobnými revizemi k úpravě fullTablename proměnnou a formát data. Řádek proměnné fullTablename musí být změněn z

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

do formátu YYYY-MM-DD_log, jako je tento

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

Poté je třeba formát data mírně upravit z

WHEN partition_plan='day'   THEN 'YYYYDDD'

podle uvedené konvence pojmenování tabulek

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

Potom lze dotaz SQL, který volá funkci k provedení vyčištění, zavolat ze skriptu denní údržby, jako je tento:

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

Což zruší tabulky YYYY-MM-DD_log, které jsou 5 dny starší než 180 před pár dny. Pro první spuštění k odstranění desítek nebo stovek starých oddílů tabulky 5 lze nastavit na mnohem vyšší hodnotu, která dosáhne požadovaného efektu.



  1. Vytvoření vlastní TinyURL

  2. Reportovací služby serveru SQL:jak zastavit spouštění sestavy při otevření

  3. Chyba Pgsql:Možná budete muset přidat přetypování explicitního typu

  4. Konektor Python MySQL – při použití fetchone byl nalezen nepřečtený výsledek