Релиз СУБД PostgreSQL 17

После года разработки опубликована новая стабильная ветка СУБД PostgreSQL 17. Обновления для новой ветки будут выходить в течение пяти лет до ноября 2029 года. Поддержка PostgreSQL 12.x, самой старой из поддерживаемых веток, будет прекращена 14 ноября.

Основные новшества:

  • При выполнении операции VACUUM (сборка мусора, чистка и упаковка дискового хранилища) задействована новая структура данных, потребляющая до 20 раз меньше памяти. Задействование новой структуры позволило ускорить выполнение операций VACUUM и сократить потребление совместно используемых ресурсов.
  • Продолжена оптимизация производительности ввода/вывода. Благодаря улучшению кода для обработки лога отложенной записи WAL удалось до двух раз повысить пропускную способность операций записи в системах с большим числом одновременно выполняемых запросов. Предложен новый интерфейс потокового ввода/вывода, позволивший повысить скорость последовательного перебора данных в таблицах и ускорить обновление статистики для планировщика запросов после выполнения операции ANALYZE.
  • Повышена производительность запросов с выражением “IN”, если в них используются индексы на базе структуры B-tree. Реализована возможность параллельного построения индексов BRIN (Block Range Index). В планировщике запросов оптимизированы проверки “NOT NULL” и ускорена обработка обобщённых табличных выражений (Common Table Expression, CTE) определяемых при помощи SQL-команды “WITH“. Обеспечено использование векторных процессорных инструкций (SIMD) для ускорения некоторых вычислений, например, для ускорения функции bit_count задействованы инструкции AVX-512.
  • Реализована поддержка новых возможностей для работы с форматом JSON, определённых в стандарте SQL/JSON. Добавлена функция JSON-TABLE для преобразования данных в формате JSON в обычные таблицы PostgreSQL, а также новые операторы jsonpath для преобразования данных JSON в родные для PostgreSQL типы данных. Предложены новые функции для создания (JSON, JSON_SCALAR и JSON_SERIALIZE) и запроса (JSON_EXISTS, JSON_QUERY и JSON_VALUE) данных в формате JSON.
  • Расширены возможности SQL-команды “MERGE“, позволяющей создавать условные SQL-выражения, объединяющие в одном выражении операции INSERT, UPDATE и DELETE. Добавлена поддержка выражения RETURNING, позволяющего вычислять и возвращать значения на основе добавленных, обновлённых или удалённых строк. Реализована поддержка обновления представлений.
  • Расширены возможности загрузки и экспорта данных в пакетном режиме.
    В команде COPY до двух раз увеличена скорость экспорта больших строк, оптимизировано копирование при совпадении исходной и целевых кодировок, добавлена опция ON_ERROR, позволяющая продолжить импорт после ошибок при вставке данных.
  • Для секционированных таблиц добавлена возможность использования столбцов с уникальными идентификаторами и поддержка техники оптимизации запросов “Constraint exclusion“.
  • В механизме подключения внешних таблиц Foreign Data Wrapper (postgres_fdw) реализована возможность передачи на внешний сервер подзапросов “EXISTS” и “IN”.
  • Реализован встроенный платформонезависимый движок для обработки свойств локали “Collation”, используемых для задания правил сортировки и методов сопоставления с учётом смысла символов (например, при сортировке цифровых значений учитывается наличие минуса и точки перед числом и разные виды написания, а при сравнении не принимается во внимание регистр символов и наличие знака ударения). Новый движок обеспечивает единое поведение при сортировке результатов запросов, не зависящее от того, на какой платформе запускается PostgreSQL.
  • В механизме логической репликации, позволяющем транслировать на другой сервер изменения, вносимые в БД в ходе добавления, удаления или обновления записей, упрощён процесс обновления СУБД. Если раньше при переходе на новый значительный выпуск приходилось удалять слоты логической репликации и повторно синхронизировать данные, то теперь можно обойтись без удаления слотов. Для отказоустойчивых конфигураций реализована возможность управления переключением на запасной сервер (failover) для логической репликации. Добавлена новая утилита pg_createsubscriber для преобразования физической реплики в новую логическую реплику.
  • Добавлена новая опция sslnegotiation для прямого согласования защищённых TLS-соединений с использованием TLS-расширения ALPN.
  • Реализована предопределённая роль pg_maintain, предоставляющая пользователю право выполнения операций, связанных с обслуживанием СУБД.
  • В утилиту pg_basebackup, применяемую для создания резервных копий БД, добавлена поддержка инкрементальных бэкапов. Для реконструирования полного бэкапа из набора инкрементальных копий предложена новая утилита pg_combinebacku. В утилиту pg_dump добавлена опция “–filter” для выбора включаемых в дамп объектов.
  • При анализе запросов при помощи операции “EXPLAIN” реализован вывод времени, потраченном на чтение и запись локальных блоков при вводе/выводе. В “EXPLAIN” также добавлены две новые опции “MEMORY” и “SERIALIZE”, при помощи которых можно определить размер используемой памяти и время, потраченное на преобразование данных для передачи по сети.
  • Обеспечена индикация прогресса выполнения операции VACUUM с индексами. Добавлено системное представление pg_wait_events, которое в сочетании с представлением pg_stat_activity позволяет подробнее изучить причины нахождения активных сеансов в состоянии ожидания.
Release. Ссылка here.