Секционирование (партиционирование) таблиц¶
2 вида секционирования в PostgreSQL - декларативное и секционирование через наследование.
Секционирование через наследование не поддерживает constraints для foreign keys в партиционированных таблицах, т.е. за состоянием ссылочной целостности нужно следить вручную.
Декларативное секционирование - появилось относительно недавно, поддерживает foreign keys. Не поддерживает триггеры before insert, поэтому создавать секции только заранее вручную.
Использование приложений¶
Ранее в проектах использовали приложение architect. Проблема - architect использует только секционирование через наследование, по состоянию на 2021 не похоже, чтоб проект развивался. Новые секции создаются автоматически при помощи триггеров (что не позволяет создать партиционированные таблицы и использовать architect для управления партициями).
Приложение django-postgres-extra - использует декларативное секционирование, но требует настройки django-проекта, подмены стандартных настроек для работы с БД, использования других базовых классов для моделей, других команд для миграций. Секции требуют ручного создания. Использовать в проекте (legacy) не удалось из-за использования django-polymorphic в моделях, которые требовалось партиционировать - был конфликт метаклассов.