2013-08-12 10 views
7

Я хочу удалить строки на одном из моих таблиц, которым больше 7 дней. Каков наилучший способ сделать это? чтобы выполнять задание cron, которое выполняется каждую ночь, или PostgreSQL имеет встроенные функции для выполнения чего-то подобного?Postgresql удалять старые строки по принципу прокатки?

+0

Есть ли временная метка в строке? –

+0

строки имеют временную метку – Arya

+0

Зачем удалять данные, почему бы просто не запросить ее? И если вы будете выполнять работу в ночное время, у вас будут данные почти за восемь дней до начала работы - почему бы не почасово или каждую минуту? – Josh

ответ

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

Самый простой способ (для меня) запланировать выполнение задания БД - это создать задание cron, которое выполняет сценарий SQL, используя psql.

Here вы можете прочитать о psql. Используйте -f или -c, чтобы передать команды SQL в psql.

Также было бы легче написать функцию PL/PgSQL, что делает свою работу и вызвать его из psql с SELECT my_function();

2

PostgreSQL в настоящее время не имеют встроенный хрон-как функциональность, так Я бы использовал cron системы для запуска подходящей инструкции удаления. Если у вас уже есть индекс btree в столбце timestamp, вы можете также запустить удаление гораздо чаще, чем в ночное время, вынимая небольшие куски за раз. Если у вас нет индекса, то работать в ночное время в нерабочее время было бы лучше.

Если они не имеют требуемого качества, вы можете попробовать разбиение на разделы. Но я сделаю это как последнее средство, а не первый курорт.

Смежные вопросы