2013-08-12 15 views
7

Chcę usunąć wiersze z jednego z moich tabel, które mają więcej niż 7 dni. Jaki jest najlepszy sposób na zrobienie tego? zrobić zadanie cron, które działa co noc lub czy PostgreSQL ma wbudowane funkcje do robienia czegoś takiego?PostgreSQL usunąć stare wiersze na bieżąco?

+0

Czy w wierszu znajduje się znacznik czasu? –

+0

wiersze mają sygnaturę czasową – Arya

+0

Dlaczego warto usuwać dane, dlaczego nie zapytać o nie? A jeśli będziesz pracować na noc, będziesz miał dane prawie osiem dni przed rozpoczęciem pracy - dlaczego nie uruchamiać co godzinę lub co minutę? – Josh

Odpowiedz

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

Najprostszym sposobem (dla mnie) zaplanowania zadania DB jest utworzenie zadania cron, które wykonuje skrypt SQL za pomocą psql.

Here można przeczytać o psql. Użyj -f lub -c, aby przekazać komendy SQL do psql.

także może być łatwiej napisać funkcję PL/pgSQL, który wykonuje swoją pracę i wywołać ją z psql z SELECT my_function();

2

PostgreSQL nie posiada obecnie wbudowaną cron podobną funkcjonalność, tak Chciałbym użyć crona systemu, aby uruchomić odpowiednią instrukcję usuwania. Jeśli masz już indeks btree w kolumnie sygnatury czasowej, możesz równie dobrze uruchamiać usuwanie znacznie częściej niż w nocy, usuwając małe porcje na raz. Jeśli nie posiadasz indeksu, to uruchomienie go co noc poza godzinami szczytu byłoby lepsze.

Jeśli nie mają one wydajności, której potrzebujesz, możesz spróbować partycjonowania. Ale robiłbym to w ostateczności, a nie w pierwszej kolejności.