Расширение pg_pathman и переход на декларативное секционирование данных
Секционирование — это способ хранения таблицы, содержащей множество записей. При секционировании записи распределяются между несколькими малыми физическими таблицами-секциями по значениям поля, набора полей или выражения (ключа секционирования). В качестве имени таблицы в словарь данных помещается логическое объединение секций – родительская (секционированная) таблица. Данные физически хранятся в таблицах-секциях, а разработчики в логике запросов обращаются к родительской таблице. Логические запросы к таблице сервер выполняет набором физических операций по секциям таблицы и индексов.
В истории развития PostgreSQL выделяются два подхода к секционированию, которые относятся к двум периодам развития:
- Секционирование с использованием наследования (Partitioning Using Inheritance) – до PostgreSQL 9.6.
- Декларативное секционирование (Native или Declarative Partitioning) – начиная с PostgreSQL 10.
Более подробно варианты описаны в документации PostgreSQL. Секционирование с использованием наследования для совместимости поддерживается в версиях 10 и выше, но рекомендуется постепенно перейти с него на декларативный синтаксис. Физические форматы хранимых данных при использовании разных подходов одинаковы. Различается объединяющая секции логика.
Расширение pg_pathman
— надстройка над механизмом секционирования с наследованием, которая автоматизирует поддержку секций, добавляет функции для управления данными, дополняет стандартный планировщик оптимизированными путями доступа к секциям по структуре таблицы.
Примечание:
Начиная с Pangolin 5.1.0, использовать
pg_pathman
не рекомендуется. Необходимо перейти на доступное во всех версиях СУБД Pangolin декларативное секционирование.По запросу CRPLTFRM-2624 для декларативного секционирования добавлена возможность автоматического, нативного интервального секционирования, аналогичного
PARTITION BY RANGE
из Oracle Database 11g+.Поддержка
pg_pathman
с версий 6.x.x не осуществляется.
В СУБД Pangolin для облегчения перехода с pg_pathman
декларативное секционирование было доработано.
Развитие оригинального pg_pathman
с появлением декларативного секционирования было заморожено, последние 2-3 года только добавляется совместимость с очередными ядрами PostgreSQL, а также исправляются ошибки.