pg_kpart — это расширение для PostgreSQL, которое блокирует выполнение запросов к партиционированным таблицам, если они пытаются просканировать все партиции без использования условия по ключу партиционирования. Оно защищает от случайных полных сканирований, возникающих из-за отсутствующих условий WHERE или JOIN по ключу партиционирования.
Если вы работаете DBA, то наверняка сталкивались с ситуацией, когда запрос обращается к партиционированной таблице, но не использует ключ партиционирования. На таблицах с сотнями миллионов или миллиардами строк это превращается в настоящую катастрофу: PostgreSQL вынужден сканировать все партиции, подсистема ввода-вывода сервера перегружается, а производительность падает для всех пользователей, подключённых к базе.
Принцип работы расширения очень простой: если запрос к защищённой партиционированной таблице не позволяет исключить ни одну партицию (partition pruning), его выполнение запрещается. Вместо масштабной нагрузки на сервер разработчик получает понятную ошибку и вынужден переписать запрос так, чтобы он фильтровал данные по ключу партиционирования — именно под такой сценарий и создавались партиционированные таблицы.
По сути, pg_kpart превращает рекомендацию «всегда фильтруйте по ключу партиционирования» из негласного правила, которое легко забыть, в жёсткое ограничение, гарантированно контролируемое самой базой данных.
Расширение поддерживает режим аудита для безопасного внедрения, механизмы белых и чёрных списков для точечного применения только к важным таблицам, а также использует отдельный код SQLSTATE, позволяющий приложениям корректно обрабатывать подобные ошибки.
Если в вашей инфраструктуре есть крупные партиционированные таблицы и вы не хотите зависеть от следующего запроса, в котором кто-то забудет указать ключ партиционирования, pg_kpart может оказаться очень полезным инструментом.
@tldr_data
Post #104
93