Что такое секционирование, зачем оно нужно и как насторить, достаточно подробно описано здесь
В этой статье приводится один способ упросить процесс настройки секционирования. Собственно способ сводится к запуску python-скрипта, который
- подключается к существующей БД postgresql (в скрипте задаются параметры подключения)
- загружает шаблон sql-скрипта и подставляет в него необходимые параметры (см. ниже). Параметры задаются в python-скрипте.
- выполняет sql-скрипт.
Условия и ограничения
Описываемый здесь способ секционирования подходит для записей, содержащих поле с датой. По значению этого поля запись сохраняется в соответствующую таблицу. В качестве временного интервала для каждой таблицы принят один месяц.
Вся работа выполняется командами sql. Python-скрипт является всего лишь оболочкой для удобного ввода исходных значений и запуска sql-скрипта. В качестве исходных данных в python-скрипте нужно указать
- '_schema_name_' - имя создаваемой схемы,
- '_master_table_' - имя главной таблицы,
- '_record_date_' - имя поля даты, по которому будет выполняться секционирование
Sql-скрипт выполняет следующие операции
- создает в БД схему с именем '_schema_name_'
- создает новую таблицу с именем '_master_table_'. !!! Это важный момент - необходимые поля для таблицы нужно указать самостоятельно прямо в шаблоне. Для поля с датой, по которому будет выполняться секционирование в качестве имени указать {{_record_date_}}
- создает триггерную функцию и триггер.
Как это работает
- Перед каждым добавлением новой записи в таблицу '_master_table_' задействуется триггер, который:
а) сопоставляет значение даты для поля {{_record_date_}} с именем дочерней таблицы б) проверяет, существует ли дочерняя таблица с таким именем. Если не существует - создает ее в) добавляет новую запись в соотвествующую дочернюю таблицу
Исходный код можно скачать здесь.