2013-08-12 8 views
7

Voglio eliminare le righe su una delle mie tabelle che hanno più di 7 giorni. Qual è il modo migliore per farlo? fare un cron job che viene eseguito ogni notte o PostgreSQL ha funzioni incorporate per fare qualcosa di simile?Postgresql cancella le vecchie file su base continuativa?

+0

C'è un timestamp nella riga? –

+0

le righe hanno il timestamp – Arya

+0

Perché cancellare i dati, perché non limitarsi a fare una ricerca? E se esegui il lavoro ogni notte, avrai dati di quasi otto giorni prima dell'esecuzione del lavoro: perché non eseguire ogni ora o ogni minuto? – Josh

risposta

10
delete from the_table 
where the_timestamp < now() - interval '7 days' 
1

Il modo più semplice (per me) per pianificare un lavoro DB è creare un cron job, che esegue uno script SQL utilizzando psql.

Here è possibile leggere su psql. Utilizzare -f o -c per passare i comandi SQL a psql.

Inoltre potrebbe essere più facile scrivere una funzione PL/pgSQL, che fa il tuo lavoro e chiamare da psql con SELECT my_function();

2

PostgreSQL attualmente non hanno una funzionalità built-in cron-like, in modo da Vorrei usare il cron del sistema per eseguire un'istruzione di cancellazione appropriata. Se hai già un indice btree nella colonna timestamp, potresti eseguire l'eliminazione molto più frequentemente che ogni notte, eliminando piccoli blocchi alla volta. Se non si dispone dell'indice, è consigliabile eseguirlo di notte durante gli orari di punta.

Se queste non hanno le prestazioni necessarie, è possibile provare il partizionamento. Ma lo farei come ultima risorsa, non una prima risorsa.