Дайджесты новостей
Инфографический патентный чертеж расширений PostgreSQL: модули pg_hint_plan, pg_ivm и PostGIS, подключаемые к ядру планировщика запросов.

Расширения PostgreSQL под ветку 19: pg_hint_plan 1.9.0, pg_ivm 1.17 и PostGIS RC3

Мощь PostgreSQL всегда заключалась в расширяемости: благодаря открытым внутренним хукам планировщика и интерфейсам индексных методов ядро можно адаптировать под самые узкоспециализированные нагрузки.

Но у этой гибкости есть оборотная сторона: каждый мажорный релиз СУБД меняет внутренние структуры ядра, требуя синхронного обновления модулей расширения. С выходом первого релиз-кандидата Postgres 19 разработчики ключевых расширений представили совместимые версии: оптимизатор подсказок pg_hint_plan 1.9.0, инкрементальные матвью pg_ivm 1.17 и геопространственный гигант PostGIS 3.7.0 RC3.

Давай рассмотрим, какие критические задачи эксплуатации решают эти релизы.

pg_hint_plan 1.9.0

Планировщик запросов PostgreSQL в 99% случаев строит оптимальный план выполнения на основе актуальной статистики ANALYZE. Но в оставшемся 1% сложных аналитических запросов с десятью JOIN оптимизатор ошибается в оценке кардинальности (cost estimation) и выбирает медленный Nested Loop вместо Hash Join, подвешивая продакшен.

Расширение pg_hint_plan позволяет инженеру директивно подсказать планировщику нужную стратегию выполнения через специальные комментарии к SQL-запросу:

/*+
    HashJoin(orders customers)
    IndexScan(orders idx_orders_created_at)
    Leading((orders customers))
*/
SELECT c.name, count(o.id)
FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE o.created_at >= '2026-10-01'
GROUP BY c.name;

Версия 1.9.0 адаптирована под измененные структуры узлов планировщика Postgres 19 и добавляет поддержку подсказок для параллельного сканирования партиционированных таблиц.

pg_ivm 1.17

Материализованные представления (Materialized Views) в стандартном Postgres имеют фатальный недостаток: чтобы обновить данные в представлении, нужно вызвать REFRESH MATERIALIZED VIEW, что приводит к полному пересчету всего запроса с нуля. Если в исходных таблицах миллиарды строк, обновление может длиться часами.

Расширение pg_ivm (Incremental View Maintenance) внедряет инкрементальное обновление: при вставке или изменении одной строки в базовой таблице через триггеры мгновенно обновляется только дельта в матвью. О развитии инкрементальных матвью в pg_ivm и безопасности данных мы писали ранее, а версия 1.17 закрывает главную боль админов — сохранение представлений при мажорном апгрейде базы:

-- Проверка целостности метаданных IVM перед запуском pg_upgrade
SELECT * FROM pg_ivm_dump_metadata();

-- Создание инкрементального представления в pg_ivm 1.17
CREATE INCREMENTAL MATERIALIZED VIEW daily_revenue AS
SELECT date_trunc('day', order_date) AS day, sum(amount) AS revenue
FROM orders
GROUP BY 1;

Ранее утилита pg_upgrade теряла метаданные инкрементальности, заставляя пересоздавать все витрины. В 1.17 добавлен экспорт метаданных, обеспечивающий мгновенный переезд на 19-ю ветку.

PostGIS 3.7.0 RC3

Географическое расширение PostGIS 3.7.0 RC3 завершает фазу стабилизации перед релизом девятнадцатой ветки ядра.

Главные улучшения версии:

  • Ускорение пространственных джойнов: алгоритм ST_Intersects и ST_DWithin оптимизирован под векторные инструкции процессора AVX-512, что дало двукратный прирост скорости на геометриях высокой сложности.
  • Поддержка параллельной агрегации кластеров: функции пространственной кластеризации (ST_ClusterKMeans) научились эффективно распараллеливаться по всем ядрам процессора в связке с планировщиком Postgres 19.

Итоги обновления расширений

Своевременная адаптация pg_hint_plan, pg_ivm и PostGIS гарантирует, что переход на PostgreSQL 19 пройдет безболезненно для сервисов со сложной аналитикой и высокими требованиями к производительности.