Автоматическое устаревание (удаление) старых записей в Postgres


15

Есть ли у Postgres какие-либо функции для поддержки устаревших старых записей?

Я хочу использовать Postgres для регистрации, как своего рода очередь, где записи (события журнала) старше двух недель автоматически удаляются.


Используйте разбиение. Простое удаление записей не уменьшит размер таблицы на диске.
Сиванн

@sivann Разве ваша рекомендация не предполагает, что его проблема связана с размером диска? Если его проблема связана со временем выполнения запроса, кажется, что удаление может быть более простым ответом, чем разбиение, нет? (все еще пытаюсь понять это сам)
Стивенм

1
Проблема в том, что записи журнала перестают быть интересными через определенное время. Удаление старых строк должно освободить место для новых свежих строк.
Василий Бурк

Ответы:


15

Нет встроенной функции для автоматического удаления строк в режиме, основанном на времени (о котором я бы знал).

Вы можете запускать ежедневное (вы решаете) задание cron для планирования простых DELETEкоманд или использовать pgAgent для этой цели.

Или вы можете использовать разделение с еженедельными разделами, которые наследуются от главной таблицы , давайте назовем это log. Это сделало бы удаление очень дешевым : просто оставьте последние две недели и удалите старые разделы.

Создайте a RULEили a TRIGGERв главной таблице, которая перенаправляет вставки в раздел текущей недели на основе системного времени. Всегда входите в главную таблицу log. Создайте дочерние таблицы заранее. Сделайте это на несколько недель вперед, чтобы быть уверенным, и запустите еженедельную работу cron, которая добавляет будущие дочерние таблицы ...

В руководстве приведены примеры кода .
Связанный ответ с функцией plpgsql, создающей таблицы автоматически:

Соответствующее решение воссоздает RULEдля перенаправления INSERT. Функция триггера может записывать в текущий раздел динамически ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.