Релиз СУБД PostgreSQL 13
Опубликована новая стабильная ветка СУБД PostgreSQL 13, обновления для новой ветки будут выходить в течение пяти лет до ноября 2025 года.
Список изменений:
- Реализована дедупликация записей в индексах B-tree, позволившая поднять производительность запросов и сократить потребление дискового пространства при индексации записей с повторяющимися данными. Дедупликация производится через периодический запуск обработчика, выполняющего слияние групп повторяющихся кортежей и замену дубликтов на ссылки на одну хранимую копию.
- Повышена производительность запросов, в которых используются агрегатные функции, сгруппированные наборы (GROUPING SETS) или секционированные (партицированные) таблицы. Оптимизации связаны с использованием при агрегировании хэшей вместо фактических данных, что позволяет избежать размещения всех данных в памяти при обработке больших запросов. При секционировании расширено число ситуаций, при которых секции могут быть отброшены или объединены.
- Добавлена возможность использования расширенной статистики, создаваемой при использовании команды «CREATE STATISTICS», для улучшения эффективности планирования запросов, содержащих условия «OR» или поиск в списках с использованием выражений «IN» или «ANY».
- Ускорена чистка индексов при выполнении операции VACUUM за счёт распараллеливания сборки мусора в индексах. При помощи нового параметра «PARALLEL» администратор может определить число потоков, которые будут одновременно запускаться для VACUUM. Добавлена возможность инициирования автоматического выполнения VACUUM после вставки данных.
- Добавлена поддержка инкрементальной сортировки, позволяющей использовать данные, отсортированные на предыдущем этапе, для ускорения сортировки на последующих этапах обработки запроса. Для включения новой оптимизации в планировщике запросов предусмотрена настройка «enable_incremental_sort», которая включена по умолчанию.
- Добавлена возможность ограничения размера слотов репликации, позволяющих в автоматическом режиме гарантировать сохранение сегментов лога отложенной записи (WAL) до тех пор, пока они не будут получены всеми запасными серверами, принимающими реплики. Слоты репликации также не позволяют основному серверу удалить строки, которые могут привести к конфликтам, даже если запасной сервер отключён. При помощи параметра max_slot_wal_keep_size теперь можно ограничить максимальный размер WAL-файлов для предотвращения исчерпания места на диске.
- Расширены возможности мониторинга активности СУБД: в команде EXPLAIN обеспечен показ дополнительной статистики по использованию WAL-лога; в pg_basebackup предоставлена возможность отследить состояние выполнения непрерывных бэкапов; в команде ANALYZE реализована индикация прогресса выполнения операции.
- Добавлена новая команда pg_verifybackup для проверки целостности резервных копий, создаваемых командой pg_basebackup.
- При работе с JSON с использованием операторов jsonpath разрешено применение функции datetime() для преобразования форматов времени (строк ISO 8601 и родных типов времени PostgreSQL). Например, можно использовать конструкции «jsonb_path_query(‘[«2015-8-1», «2015-08-12»]’, ‘$[*] ? (@.datetime() < «2015-08-2″.datetime())’)» и «jsonb_path_query_array(‘[«12:30», «18:40»]’, ‘$[*].datetime(«HH24:MI»)’)».
- Добавлена встроенная функция gen_random_uuid() для генерации идентификаторов UUID v4.
- В системе секционирования реализована полная поддержка логической репликации и задаваемых выражением «BEFORE» триггеров, работающих на уровне строк.
- Синтаксис «FETCH FIRST» теперь допускает использование выражения «WITH TIES», позволяющего вернуть дополнительные строки, которые находятся в хвосте результирующего набора, получаемого после применения «ORDER BY».
- Реализована концепция заслуживающих доверия дополнений («trusted extension»), которые могут быть установлены обычными пользователями, не имеющими прав администратора СУБД. Список подобных дополнений изначально предопределён и может быть расширен суперпользователем. В число заслуживающих доверия дополнений включены pgcrypto, tablefunc, hstore и т.п.
- В механизме подключения внешних таблиц Foreign Data Wrapper (postgres_fdw) реализована поддержка аутентификации на основе сертификатов. При использовании SCRAM-аутентификации клиентам разрешено запрашивать «привязку канала» (channel binding).