Witajcie,
W bazie PostgreSQL istnieje funkcja archive();
jej kod wygląda mniej więcej tak:
insert into arch.zdarzenia_arch
(select * from log.zdarzenia z where z.data_zmiany <= now() - interval '30 day');
--
delete from log.zdarzenia where idx_zdarzenia in (
select z.idx_zdarzenia from log.zdarzenia z where z.data_zmiany <= now() - interval '30 day');
Niestety na dzień dzisiejszy tabela log.zdarzenia spuchła tak bardzo, że jest w niej ponad 16 mln rekordów (nie ma to jak zapomnieć o archwiwizacji). Sam count wykonywał się kilkanaście minut (sprzęt też nie jest zbyt wysokich lotów). W związku z powyższym odpalenie procedury na obecnym zbiorze danych wykonuje się kilka jeśli nie kilkanaście godzin (póki co jeszcze się nie skończyło). Mimo iż na polu data_zmiany jest indeks to i tak trwa to strasznie długo. Macie pomysł jak to przyspieszyć na obecnej spuchniętej tabeli?