Last updated
Was this helpful?
Last updated
Was this helpful?
С общей информацией о секционировании вы можете ознакомиться на .
Для секционирования по месяцам нужно существующую таблицу подключить как раздел исторических данных.
Сначала для журнала робота. Создаём новую головную секционированную таблицу идентичной таблице Logs структуры под каким-нибудь новым именем, например, Logs2:
Создаем секцию (можно создать сразу несколько, с запасом) с данными на будущее (даты приведены для примера, нужно будет заменить на актуальные):
Подготавливаем существующую таблицу с данными Logs – добавляем в неё ограничение на поле OrchTimestampUtc и проверяем это ограничение на данных таблицы:
Если validate constraint
выдаёт ошибки, то надо проверить данные/ограничение, и по возможности, провести корректировки (например, удалить некорректные данные).
Всю миграцию надо завершить до наступления даты 2023-04-01, либо удалить ограничение:
и начать сначала.
Переименовываем таблицы и добавляем существующую таблицу (теперь она называется Logs_archive) как секцию к головной секционированной таблице Logs:
Пока не настанет 2023-03-25, данные будут писаться в секцию Logs_archive (в старую архивную таблицу). Начиная с 2023-03-25 – в секцию Logs_20230325. Все запросы с фильтром по дате будут прозрачным для приложения образом идти через таблицу Logs.
Повторяем индексы на вновь созданной секции таблицы Logs_20230325 (если несколько секций, то для каждой секции):
Повторяем аналогичные действия для журнала Оркестратора:
Секций с новыми данными сразу можно добавить с запасом несколько. Дальнейшее их создание и удаление старых секций можно автоматизировать на основе задачи по расписанию.
Устанавливаем расширение pg_cron
- его установка может отличаться для разных дистрибутивов Linux.
Копируем пакет с pg_cron
в расшаренную папку, из которой будет производиться его установка. Переходим в эту папку:
Устанавливаем пакет:
Вносим изменения в файл postgresql.conf:
Устанавливаем (или дописываем) 'pg_cron' в shared_preload_libraries
:
Добавляем в конец файла строку:
Даем возможность локально подключаться к БД без пароля будущему заданию – вносим изменение в pg_hba.conf
:
Перезапускаем службу:
Создаем в БД ltoolslogs расширение pg_cron
. Можно через какой-то менеджер для работы с PostgreSQL, например, pgAdmin4
. Или из командной строки:
После этого проверим, что в БД ltoolslogs появились схема cron
и необходимые для заданий объекты БД:
В БД ltoolslogs создаем процедуру для создания секций:
В БД ltoolslogs создаем задание, которое будет каждые 30 минут запускать созданную процедуру:
Для пересоздания задания нужно удалить запись о нем из таблицы cron."job"
и создать задание заново.