E.33. Выпуск 10.17
Дата выпуска: 2021-05-13
В этот выпуск вошли различные исправления, внесённые после версии 10.16. За информацией о нововведениях версии 10 обратитесь к Разделу E.50.
E.33.1. Миграция на версию 10.17
Если используется версия 10.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 10.16, см. также Раздел E.34.
E.33.2. Изменения
- Предотвращение целочисленного переполнения при вычислении индексов в массивах (Том Лейн) - Ранее код обработки массивов не отслеживал переполнение целого при сложении нижней границы с длиной массива. В результате элементы с запредельными индексами (которые нельзя записать в виде целого числа) оказывались недоступными, но что ещё хуже, в дальнейшем они нарушали работу операций присваивания. Это могло приводить к перезаписи памяти и, как следствие, сбоям или нежелательным изменениям данных. (CVE-2021-32027) 
- Исправление некорректной обработки «отбросовых» столбцов в целевых списках - INSERT ... ON CONFLICT ... UPDATE(Том Лейн)- Если список - UPDATEсодержал вложенные выборки, возвращающие несколько столбцов (в числе которых помимо столбцов с нужными данными могут быть отбросовые столбцы), выполнение- UPDATEзавершалось сохранением кортежей, включающих значения этих дополнительных столбцов. Это относительно безвредно само по себе, но если в таблицу добавлялись новые столбцы, эти значения оказывались недоступными, а если их типы данных отличались от типов добавленных столбцов, могли происходить сбои.- Помимо этого, в версиях, которые поддерживают изменение, затрагивающее несколько секций, межсекционное изменение, вызванное в таком случае, порождало противоположную проблему: отбросовые столбцы удалялись из целевого списка, что обычно немедленно приводило к краху из-за нарушения в работе механизма вложенной выборки с несколькими столбцами. (CVE-2021-32028) 
- Запрещение пометки допустимости NULL для столбца идентификации (Вик Фиринг) - Указание - GENERATED ... AS IDENTITYподразумевает ограничение- NOT NULL, поэтому оно не должно приниматься с явным указанием- NULL.
- Реализация возможности задавать в - ALTER ROLE/DATABASE ... SETпроизвольные параметры- role,- session_authorizationи- temp_buffers(Том Лейн)- Ранее излишне строгие проверки могли не допускать команды с некоторыми значениями, которые могли бы вполне корректно работать позже. Это создавало проблемы с упорядочиванием команд при выгрузке/загрузке данных и при обновлении. 
- Устранение ошибки, связанной с приведением результата выражения - COLLATEк типу, не поддерживающему сортировку (Том Лейн)- При таком приведении строилось дерево разбора, в котором - COLLATEдолжно было применяться к значению, не поддерживающему сортировку. Хотя обычно это ни на что не влияло (так как- COLLATEне обрабатывается во время выполнения), но полученное с подобным приведением представление нельзя было загрузить после выгрузки.
- Недопущение вызова оконных функций и процедур через сообщения по протоколу «быстрого пути» (Том Лейн) - На этом уровне поддерживаются только простые функции. При вызове агрегатной функции ошибка выдавалась и раньше, но при вызове оконной функции происходил сбой, а вызов процедуры мог выполниться успешно, только если процедура не манипулировала транзакциями. 
- Добавление поддержки событийных триггеров в - pg_identify_object_as_address()(Джоэл Джейкобсон)
- Исправление в функции - to_char()обработки кодов формата, задающих месяц римскими цифрами, с отрицательными интервалами (Жюльен Руо)- Ранее при вызове функции с такими параметрами обычно происходил сбой. 
- Проверка указания в аргументе функции - pg_import_system_collations()корректного OID схемы (Tom Lane)
- Устранение обращения к неинициализированному значению при разборе квантификатора - \{в регулярном выражении в режиме BRE (Том Лейн)- m,- n\}- В результате ошибки этот квантификатор мог работать как «нежадный», то есть как квантификатор - {в расширенных регулярных выражениях.- m,- n}?
- Рассмотрение системных столбцов при оценивании количества групп с использованием расширенной статистики (Томаш Вондра) - Ранее для запросов вида - SELECT ... GROUP BY a, b, ctidмогли выдаваться странные оценки.
- Предотвращение деления на ноль при оценивании избирательности регулярного выражения с очень длинным фиксированным префиксом (Том Лейн) - При таком условии в качестве значения избирательности выдавалось - NaN, что приводило к сбоям проверочных утверждений или непонятному поведению планировщика.
- Устранение ошибки выхода за границу таблицы при сканировании битовой карты индекса BRIN (Томаш Вондра) - При использовании в индексе BRIN страничных зон размера, не равного степени двух, были возможны особые случаи, когда в ходе сканирования битовой карты происходило обращение к странице за физическим концом таблицы, приводившее к ошибке «could not open file» (не удалось открыть файл). 
- Недопущение некорректной смены линии времени при восстановлении незафиксированных двухфазных транзакций из WAL (Соумйадип Чакраборти, Джимми Йи, Кевин Йеп) - Вследствие исправленной теперь ошибки последующие записи WAL сохранялись с идентификатором неправильной линии времени, что порождало проблемы с согласованностью данных и даже могло привести к остановке сервера при последующем перезапуске. 
- Освобождение всех блокировок в случае остановки стартового процесса ведомого сервера (Фудзии Масао) - В случае остановки ведомого сервера в ходе восстановления некоторые блокировки могли сохраниться. Это приводило к сбоям проверочных утверждений в отладочных сборках; могло ли это иметь серьёзные последствия в обычных сборках, неизвестно. 
- Устранение сбоя при выполнении команды - ALTER SUBSCRIPTION REFRESHв рабочем процессе логической репликации (Питер Смит)- Код ядра не выполняет такую команду, но она вполне может выполняться в триггере реплики. 
- Использование по умолчанию значения - wal_sync_method=- fdatasyncв последних версиях FreeBSD (Томас Манро)- Во FreeBSD 13 поддерживается режим - open_datasync, и он в принципе должен использоваться по умолчанию, однако пока не ясно, в чём его преимущество для Postgres, решено оставить прежний вариант.
- Обеспечение полной очистки в случае прерывания при отсоединении сегмента DSM (Томас Манро) - В результате исправленной теперь ошибки временные файлы могли не очищаться должным образом после параллельного запроса. 
- Устранение утечки памяти при инициализации SSL-параметров сервера (Микаэль Пакье) - Объём утечки обычно был незначительным, но он мог увеличиваться, если главному процессу неоднократно посылались сигналы SIGHUP. 
- Устранение разнообразных незначительных утечек памяти в коде сервера (Том Лейн, Андрес Фройнд) 
- Предотвращение бесконечного цикла в libpq при получении некорректной длины в сообщении ParameterDescription (Том Лейн) 
- Использование правильных разделителей (обратной косой черты) в пути к программе pg_ctl, который выводит initdb в инструкции по запуску сервера (Нитин Ядав) 
- Восстановление в 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 (Ной Миш)