PostgreSQL 18.6, 17.11, 16.15, 15.19, 14.24 и PostgreSQL 19 Beta 3

1000px.jpg

13 августа PostgreSQL Global Development Group выпустила обновления всех поддерживаемых веток PostgreSQL — 18.6, 17.11, 16.15, 15.19 и 14.24. Одновременно опубликована третья бета-версия будущего PostgreSQL 19. В совокупности обновление закрывает 28 уязвимостей и исправляет более 110 ошибок, обнаруженных за последние несколько месяцев.

Ветка PostgreSQL 18 сразу перешла с версии 18.4 на 18.6: PostgreSQL 18.5 не распространялся, поскольку после подготовки выпуска разработчики обнаружили регрессию. Обновление в пределах одной основной ветки не требует pg_upgrade или выгрузки и восстановления базы — достаточно остановить сервер, обновить бинарные файлы и запустить его снова. Для некоторых конфигураций после обновления, однако, потребуются дополнительные действия.

Среди основных исправлений:

  • Закрыты 28 уязвимостей, причём несколько получили оценку CVSS 8.8 и позволяют при определённых условиях добиться выполнения произвольного кода. В частности, исправлены переполнения буфера в to_char(), plperl и обработке регулярных выражений, ошибки смешения типов в работе с курсорами и внутренними типами, а также SQL-инъекция при декомпиляции выражений EXTRACT(). Полный перечень CVE опубликован в официальном анонсе.

  • Для логического декодирования введён новый параметр output_plugin_libraries, ограничивающий список библиотек, которые разрешено загружать в качестве output-плагинов. Ранее пользователь с правами репликации мог выбрать произвольную загружаемую библиотеку, что стало причиной CVE-2026–6471. По умолчанию разрешены только входящие в PostgreSQL pgoutput и test_decoding; сторонние плагины после обновления потребуется явно добавить в конфигурацию.

  • Исправлена серьёзная проблема в pgcrypto: при использовании некоторых неподдерживаемых OpenSSL алгоритмов модуль мог не заметить ошибку шифрования и фактически сохранить данные в легко восстанавливаемом виде. Для извлечения уже затронутых данных добавлена опция ignore-cipher-failure, после чего разработчики рекомендуют повторно зашифровать их современным алгоритмом. Уязвимость получила идентификатор CVE-2026–14663.

  • В psql исправлена обработка сценариев с COPY ... FROM STDIN. Если команда COPY завершалась ошибкой ещё до начала передачи данных, последующие строки могли быть интерпретированы как команды psql или SQL. Ошибка зарегистрирована как CVE-2026–6464 и могла создавать условия для SQL-инъекции.

  • Исправлены параллельные сборки GIN-индексов, которые могли записать в pg_class.reltuples некорректное значение, включая Infinity или NaN. В результате autovacuum и autoanalyze могли перестать обслуживать соответствующую таблицу. Разработчики рекомендуют после обновления проверить reltuples у таблиц с GIN-индексами и выполнить ANALYZE, если значение оказалось неверным.

  • Исправлены ошибки расширения btree_gist, включая неправильную обработку NaN в float4/float8 и сортировку bit/bit varying при построении индекса. Индексы btree_gist с такими типами после установки обновления может потребоваться перестроить.

  • В ltree устранено целочисленное переполнение при сравнении значений с очень большим числом меток. Значения примерно с более чем 14 653 метками могли сравниваться неверно, что в отдельных случаях приводило к фактическому повреждению B-tree-индекса. Для затронутых индексов рекомендуется REINDEX.

  • Исправлена partition pruning для таблиц с секционированием RANGE: планировщик мог ошибочно исключить DEFAULT-секцию и в результате вернуть не все строки. Также устранены проблемы с секционированными таблицами, содержащими внешние таблицы, и несколько ошибок в RETURNING OLD/NEW.

  • Исправлено несколько ошибок планировщика, способных приводить к неверным результатам запросов. Они затрагивали, в частности, выражения value IN (array) с потенциально пустым массивом и оконные функции COUNT() с EXCLUDE или без ORDER BY. Улучшена производительность hash join с несколькими ключами соединения и большим количеством NULL.

  • Устранена гонка при обнаружении конфликтов на уровне изоляции SERIALIZABLE. При работе с изначально пустым B-tree-индексом конфликт иногда оставался незамеченным, позволяя двум конфликтующим транзакциям завершиться успешно и тем самым нарушая гарантии сериализуемости.

  • Исправлено журналирование WAL при очистке битов в visibility map — ошибка могла приводить к некорректным инкрементальным резервным копиям и в некоторых случаях мешать восстановлению после частично записанной страницы. Также исправлено логическое декодирование пустых подготовленных транзакций.

  • В libpq, pg_createsubscriber, pg_restore, REINDEX CONCURRENTLY, jsonpath, GiST/SP-GiST и ряде других компонентов устранены ошибки и зависания. Кроме того, PostgreSQL теперь можно собирать с OpenSSL 4.

  • В комплект включена база часовых поясов tzdata 2026c, отражающая, среди прочего, переход канадской Альберты на постоянный UTC−06 с ноября 2026 года и Марокко на постоянный UTC+00 с 20 сентября 2026 года.

Отдельно разработчики предупредили об ошибке, затрагивающей PostgreSQL 14, 15 и 16: исправлена взаимная блокировка при воспроизведении WAL, созданного сервером с более старой минорной версией. Регрессия появилась в предыдущей серии обновлений и могла привести к зависанию standby-сервера, следующего за primary с более старым обновлением PostgreSQL.

PostgreSQL 19 Beta 3

Одновременно вышла PostgreSQL 19 Beta 3. Это тестовая версия будущей основной ветки, которую разработчики пока не рекомендуют использовать в производственных системах. Обновление с предыдущих beta-версий PostgreSQL 19 выполняется аналогично переходу между основными версиями — с помощью pg_upgrade либо pg_dump/pg_restore.

Основные изменения относительно Beta 2:

  • отменено ранее добавленное GROUP BY ALL;
  • исправлен ряд ошибок новой поддержки темпоральных таблиц с синтаксисом FOR PORTION OF;
  • исправлена новая функция синхронизации последовательностей при логической репликации, включая гонку при REFRESH SEQUENCES;
  • устранена ошибка unexpected logical decoding status change, возникавшая при одновременном включении logical decoding;
  • исправлена обработка изменения владельца подписок;
  • устранено получение неверных результатов в postgres_fdw при передаче на удалённый сервер сравнений массивов вида field = ANY($1) с неявным преобразованием типа;
  • исправлено падение при проверке внешнего ключа, связанного с допускающим NULL ограничением UNIQUE;
  • исправлен разбор числовых литералов с символами подчёркивания в pg_plan_advice;
  • восстановлена пропущенная секция FORMAT при обратном преобразовании JSON_ARRAY(query) в SQL.

Полный перечень возможностей будущей PostgreSQL 19 и изменений в тестовой ветке доступен в release notes PostgreSQL 19. Финальный выпуск PostgreSQL 19 запланирован на сентябрь 2026 года.

PostgreSQL распространяется под свободной лицензией PostgreSQL License. Поддержка PostgreSQL 14 подходит к концу: последние исправления для этой ветки планируется выпустить 12 ноября 2026 года, поэтому разработчики рекомендуют пользователям PostgreSQL 14 заранее запланировать переход на более новую поддерживаемую версию.

>>> Источник

Linux.org.ru прочитано 1072 раза