Project

Общее

Профиль

Секционирование (партиционирование) таблиц

2 вида секционирования в PostgreSQL - декларативное и секционирование через наследование.

Секционирование через наследование не поддерживает constraints для foreign keys в партиционированных таблицах, т.е. за состоянием ссылочной целостности нужно следить вручную.

Декларативное секционирование - появилось относительно недавно, поддерживает foreign keys. Не поддерживает триггеры before insert, поэтому создавать секции только заранее вручную.

Использование приложений

Ранее в проектах использовали приложение architect. Проблема - architect использует только секционирование через наследование, по состоянию на 2021 не похоже, чтоб проект развивался. Новые секции создаются автоматически при помощи триггеров (что не позволяет создать партиционированные таблицы и использовать architect для управления партициями).

Приложение django-postgres-extra - использует декларативное секционирование, но требует настройки django-проекта, подмены стандартных настроек для работы с БД, использования других базовых классов для моделей, других команд для миграций. Секции требуют ручного создания. Использовать в проекте (legacy) не удалось из-за использования django-polymorphic в моделях, которые требовалось партиционировать - был конфликт метаклассов.