PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

postgresql elimina le tabelle delle partizioni

Per chiunque finisca qui alla ricerca di come eliminare le partizioni della tabella in PostgreSQL, ecco la risposta moderna.

La soluzione non consiste nell'usare un'istruzione DELETE perché eliminerà i dati senza eliminare le partizioni di tabella corrispondenti che contenevano i dati. L'OP ha chiesto informazioni sulla gestione delle tabelle delle partizioni, non sull'eliminazione dei record, quindi qualsiasi soluzione che utilizza le istruzioni DELETE aggiunge un sovraccarico del database non necessario per l'eliminazione dei record, lascia le tabelle delle partizioni vuote e ignora completamente uno dei vantaggi principali dell'utilizzo del partizionamento; DROPing il tavolo quando non è più utile.

In questo caso la soluzione deve essere DROP la tabella delle partizioni non più necessaria. Ho scritto una soluzione per risolvere questo problema nel mio ambiente di produzione, la risposta è qui .

Per risolvere il problema dell'OP, la funzione che ho scritto può essere utilizzata con due leggere revisioni per modificare fullTablename variabile e il formato della data. La riga della variabile fullTablename deve essere modificata da

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

nel formato AAAA-MM-GG_log come questo

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

Quindi il formato della data deve essere leggermente modificato da

WHEN partition_plan='day'   THEN 'YYYYDDD'

alla convenzione di denominazione delle tabelle indicata

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

Quindi la query SQL che chiama la funzione per eseguire la pulizia può essere chiamata da uno script di manutenzione giornaliera come questo:

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

Che eliminerà le tabelle AAAA-MM-GG_log che sono 5 giorni più vecchi di 180 giorni fa. Per un'esecuzione iniziale per eliminare dozzine o centinaia di vecchie partizioni di tabelle, 5 può essere impostato su un valore molto più alto che ottenga l'effetto desiderato.