E.35. Выпуск 9.6.22
Дата выпуска: 2021-05-13
В этот выпуск вошли различные исправления, внесённые после версии 9.6.21. За информацией о нововведениях версии 9.6 обратитесь к Разделу E.57.
Сообщество PostgreSQL прекратит выпуск обновлений для версии 9.6.X в ноябре 2021 г. Поэтому пользователям не следует медлить с переходом на более новую основную версию.
E.35.1. Миграция на версию 9.6.22
Если используется версия 9.6.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 9.6.21, см. Раздел E.36.
E.35.2. Изменения
Предотвращение целочисленного переполнения при вычислении индексов в массивах (Том Лейн)
Ранее код обработки массивов не отслеживал переполнение целого при сложении нижней границы с длиной массива. В результате элементы с запредельными индексами (которые нельзя записать в виде целого числа) оказывались недоступными, но что ещё хуже, в дальнейшем они нарушали работу операций присваивания. Это могло приводить к перезаписи памяти и, как следствие, сбоям или нежелательным изменениям данных. (CVE-2021-32027)
Исправление некорректной обработки «отбросовых» столбцов в целевых списках
INSERT ... ON CONFLICT ... UPDATE
(Том Лейн)Если список
UPDATE
содержал вложенные выборки, возвращающие несколько столбцов (в числе которых помимо столбцов с нужными данными могут быть отбросовые столбцы), выполнениеUPDATE
завершалось сохранением кортежей, включающих значения этих дополнительных столбцов. Это относительно безвредно само по себе, но если в таблицу добавлялись новые столбцы, эти значения оказывались недоступными, а если их типы данных отличались от типов добавленных столбцов, могли происходить сбои.Помимо этого, в версиях, которые поддерживают изменение, затрагивающее несколько секций, межсекционное изменение, вызванное в таком случае, порождало противоположную проблему: отбросовые столбцы удалялись из целевого списка, что обычно немедленно приводило к краху из-за нарушения в работе механизма вложенной выборки с несколькими столбцами. (CVE-2021-32028)
Реализация возможности задавать в
ALTER ROLE/DATABASE ... SET
произвольные параметрыrole
,session_authorization
иtemp_buffers
(Том Лейн)Ранее излишне строгие проверки могли не допускать команды с некоторыми значениями, которые могли бы вполне корректно работать позже. Это создавало проблемы с упорядочиванием команд при выгрузке/загрузке данных и при обновлении.
Устранение ошибки, связанной с приведением результата выражения
COLLATE
к типу, не поддерживающему сортировку (Том Лейн)При таком приведении строилось дерево разбора, в котором
COLLATE
должно было применяться к значению, не поддерживающему сортировку. Хотя обычно это ни на что не влияло (так какCOLLATE
не обрабатывается во время выполнения), но полученное с подобным приведением представление нельзя было загрузить после выгрузки.Недопущение вызова оконных функций и процедур через сообщения по протоколу «быстрого пути» (Том Лейн)
На этом уровне поддерживаются только простые функции. При вызове агрегатной функции ошибка выдавалась и раньше, но при вызове оконной функции происходил сбой, а вызов процедуры мог выполниться успешно, только если процедура не манипулировала транзакциями.
Добавление поддержки событийных триггеров в
pg_identify_object_as_address()
(Джоэл Джейкобсон)Исправление в функции
to_char()
обработки кодов формата, задающих месяц римскими цифрами, с отрицательными интервалами (Жюльен Руо)Ранее при вызове функции с такими параметрами обычно происходил сбой.
Устранение обращения к неинициализированному значению при разборе квантификатора
\{
в регулярном выражении в режиме BRE (Том Лейн)m
,n
\}В результате ошибки этот квантификатор мог работать как «нежадный», то есть как квантификатор
{
в расширенных регулярных выражениях.m
,n
}?Предотвращение деления на ноль при оценивании избирательности регулярного выражения с очень длинным фиксированным префиксом (Том Лейн)
При таком условии в качестве значения избирательности выдавалось
NaN
, что приводило к сбоям проверочных утверждений или непонятному поведению планировщика.Устранение ошибки выхода за границу таблицы при сканировании битовой карты индекса BRIN (Томаш Вондра)
При использовании в индексе BRIN страничных зон размера, не равного степени двух, были возможны особые случаи, когда в ходе сканирования битовой карты происходило обращение к странице за физическим концом таблицы, приводившее к ошибке «could not open file» (не удалось открыть файл).
Освобождение всех блокировок в случае остановки стартового процесса ведомого сервера (Фудзии Масао)
В случае остановки ведомого сервера в ходе восстановления некоторые блокировки могли сохраниться. Это приводило к сбоям проверочных утверждений в отладочных сборках; могло ли это иметь серьёзные последствия в обычных сборках, неизвестно.
Использование по умолчанию значения
wal_sync_method
=fdatasync
в последних версиях FreeBSD (Томас Манро)Во FreeBSD 13 поддерживается режим
open_datasync
, и он в принципе должен использоваться по умолчанию, однако пока не ясно, в чём его преимущество для Postgres, решено оставить прежний вариант.Обеспечение полной очистки в случае прерывания при отсоединении сегмента DSM (Томас Манро)
В результате исправленной теперь ошибки временные файлы могли не очищаться должным образом после параллельного запроса.
Устранение разнообразных незначительных утечек памяти в коде сервера (Том Лейн, Андрес Фройнд)
Предотвращение бесконечного цикла в libpq при получении некорректной длины в сообщении ParameterDescription (Том Лейн)
Восстановление в psql предыдущего поведения присваивания
\connect service=
(Tom Lane)значение
В результате предыдущего исправления ошибки переменные окружения (например,
PGPORT
) стали переопределять записи в файле служб в данном контексте. Сейчас восстановлено прежнее поведение, при котором действует обратный приоритет.Устранение условий гонки при обнаружении изменений в файле командой psql
\e
и связанными с ней командами (Лауренц Альбе)При очень быстром редактировании файла можно было ввести в заблуждение проверку изменения временного файла, отслеживающую время изменения файла.
Добавление недостающей проверки версии файла в pg_restore (Том Лейн)
При чтении архива в специальном формате из источника, не поддерживающего позиционирование, утилита pg_restore забывала проверить версию архива. В случае загрузки архива более новой версии, чем она поддерживает, впоследствии могла возникнуть путаница.
Добавление в pg_upgrade дополнительных проверок на наличие в пользовательских таблицах типов, не поддерживающих обновление (Том Лейн)
Усовершенствование выявления случаев, когда тип, не поддерживающий обновление, оказывается внутри типа-контейнера (например, в типе массива или диапазона). Также теперь запрещается обновление, если пользовательские таблицы содержат системные составные типа, так как OID таких типов может меняться от версии к версии.
Исправление в pg_waldump подсчёта записей
XACT
при сборе статистики по записям (Кётаро Хоригути)Ликвидация в
contrib/amcheck
ошибочного проверочного утверждения, не допускающего одновременно установленные в кортеже флагиHEAP_XMAX_LOCK_ONLY
иHEAP_KEYS_UPDATED
(Жюльен Руо)Такое состояние вполне легально после
SELECT FOR UPDATE
.Корректировка правил сборки с VPATH для совместимости с последними версиями компилятора Oracle Developer Studio (Ной Миш)
Исправление тестирования языка PL/Python для Python 3 в ОС Solaris (Ной Миш)