E.47. Выпуск 12.7
Дата выпуска: 2021-05-13
В этот выпуск вошли различные исправления, внесённые после версии 12.6. За информацией о нововведениях версии 12 обратитесь к Разделу E.54.
E.47.1. Миграция на версию 12.7
Если используется версия 12.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 12.6, см. также Раздел E.48.
E.47.2. Изменения
- Предотвращение целочисленного переполнения при вычислении индексов в массивах (Том Лейн) - Ранее код обработки массивов не отслеживал переполнение целого при сложении нижней границы с длиной массива. В результате элементы с запредельными индексами (которые нельзя записать в виде целого числа) оказывались недоступными, но что ещё хуже, в дальнейшем они нарушали работу операций присваивания. Это могло приводить к перезаписи памяти и, как следствие, сбоям или нежелательным изменениям данных. (CVE-2021-32027) 
- Исправление некорректной обработки «отбросовых» столбцов в целевых списках - INSERT ... ON CONFLICT ... UPDATE(Том Лейн) §- Если список - UPDATEсодержал вложенные выборки, возвращающие несколько столбцов (в числе которых помимо столбцов с нужными данными могут быть отбросовые столбцы), выполнение- UPDATEзавершалось сохранением кортежей, включающих значения этих дополнительных столбцов. Это относительно безвредно само по себе, но если в таблицу добавлялись новые столбцы, эти значения оказывались недоступными, а если их типы данных отличались от типов добавленных столбцов, могли происходить сбои.- Помимо этого, в версиях, которые поддерживают изменение, затрагивающее несколько секций, межсекционное изменение, вызванное в таком случае, порождало противоположную проблему: отбросовые столбцы удалялись из целевого списка, что обычно немедленно приводило к краху из-за нарушения в работе механизма вложенной выборки с несколькими столбцами. (CVE-2021-32028) 
- Исправление потенциально некорректного вычисления результатов - UPDATE ... RETURNINGдля межсекционных изменений с соединением (Амит Ланготе, Эцуро Фудзита) § §- Если при выполнении - UPDATEс секционированной таблицей строка должна была переместиться в другую секцию с физически отличающимся типом строки (например, в секцию с другим набором удалённых столбцов), результат- RETURNINGмог вычисляться некорректно либо могли выдаваться ошибки. Проблемы наблюдались, только если операция- UPDATEзатрагивала другие таблицы, соединённые с целевой. (CVE-2021-32029)
- Обеспечение корректного изменения свойств отложенности ограничений в секционированных таблицах (Альваро Эррера) § - В случае применения команды - ALTER TABLE ... ALTER CONSTRAINTк ограничению внешнего ключа секционированной таблицы, свойства- DEFERRABLEи/или- INITIALLY DEFERRED, относящиеся к ограничениям и триггерам конечных секций, не корректировались должным образом. В результате такие ограничения не работали как ожидалось. После перехода на эту версию вы можете исправить все некорректно работающие секционированные таблицы, выполнив для них команду- ALTER, задающую нужные свойства.- Теперь также запрещается применение таких команд - ALTERнепосредственно к ограничениям конечных секций. Наличие разных свойств ограничений в иерархии секционирования не поддерживается, поэтому такая команда- ALTERдолжна применяться только к корню дерева секционирования.
- Требование полного совпадения определений генерируемых столбцов в родительской таблице и в дочерней таблице, присоединяемой к ней с помощью - ALTER TABLE ... INHERIT(Питер Эйзентраут) §
- Запрещение пометки допустимости NULL для столбца идентификации (Вик Фиринг) § - Указание - GENERATED ... AS IDENTITYподразумевает ограничение- NOT NULL, поэтому оно не должно приниматься с явным указанием- NULL.
- Реализация возможности задавать в - ALTER ROLE/DATABASE ... SETпроизвольные параметры- role,- session_authorizationи- temp_buffers(Том Лейн) §- Ранее излишне строгие проверки могли не допускать команды с некоторыми значениями, которые могли бы вполне корректно работать позже. Это создавало проблемы с упорядочиванием команд при выгрузке/загрузке данных и при обновлении. 
- Обеспечение сохранения заданных для индекса ориентиров статистики в процессе - REINDEX CONCURRENTLY(Микаэль Пакье) § §
- Исправление работы конструкции - COMMIT AND CHAINс транзакцией, в которой есть активные точки сохранения (Фудзии Масао) §
- Устранение ошибки, связанной с приведением результата выражения - COLLATEк типу, не поддерживающему сортировку (Том Лейн) §- При таком приведении строилось дерево разбора, в котором - COLLATEдолжно было применяться к значению, не поддерживающему сортировку. Хотя обычно это ни на что не влияло (так как- COLLATEне обрабатывается во время выполнения), но полученное с подобным приведением представление нельзя было загрузить после выгрузки.
- Исправление ошибки использования освобождённой памяти при сохранении кортежей для триггеров - AFTER(Амит Ланготе) §- В некоторых случаях это могло приводить к краху сервера. 
- Недопущение вызова оконных функций и процедур через сообщения по протоколу «быстрого пути» (Том Лейн) § - На этом уровне поддерживаются только простые функции. При вызове агрегатной функции ошибка выдавалась и раньше, но при вызове оконной функции происходил сбой, а вызов процедуры мог выполниться успешно, только если процедура не манипулировала транзакциями. 
- Добавление поддержки событийных триггеров в - 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, решено оставить прежний вариант.
- Передача корректного OID триггера пост-обработчикам изменений в объектах при выполнении - ALTER CONSTRAINT(Альваро Эррера) §- При изменении свойств триггера во время - ALTER CONSTRAINTпост-обработчик изменения уведомлялся о том, что изменяется триггер, но вместо OID триггера получал OID ограничения.
- Обеспечение полной очистки в случае прерывания при отсоединении сегмента DSM (Томас Манро) § - В результате исправленной теперь ошибки временные файлы могли не очищаться должным образом после параллельного запроса. 
- Устранение утечки памяти при инициализации SSL-параметров сервера (Микаэль Пакье) § - Объём утечки обычно был незначительным, но он мог увеличиваться, если главному процессу неоднократно посылались сигналы SIGHUP. 
- Устранение разнообразных незначительных утечек памяти в коде сервера (Том Лейн, Андрес Фройнд) § § § § § § § 
- Ликвидация ошибки, возникавшей в блоке PL/pgSQL - DO, в котором используются переменные составного типа и при этом осуществляется управление транзакциями (Том Лейн) §- Ранее в таком случае выдавалось сообщение об утечке дескрипторов кортежей. 
- Предотвращение бесконечного цикла в libpq при получении некорректной длины в сообщении ParameterDescription (Том Лейн) 
- Использование правильных разделителей (обратной косой черты) в пути к программе pg_ctl, который выводит initdb в инструкции по запуску сервера (Нитин Ядав) § 
- Восстановление в psql предыдущего поведения присваивания - \connect service=(Tom Lane) §- значение- В результате предыдущего исправления ошибки переменные окружения (например, - PGPORT) стали переопределять записи в файле служб в данном контексте. Сейчас восстановлено прежнее поведение, при котором действует обратный приоритет.
- Исправление в функции psql - ON_ERROR_ROLLBACKобработки команд- COMMIT AND CHAIN(Артур Насименту) §- Ранее при попытке её использовать с такими командами выдавалась ошибка «savepoint "pg_psql_temporary_savepoint" does not exist» (точка сохранения "pg_psql_temporary_savepoint" не существует). 
- Устранение условий гонки при обнаружении изменений в файле командой psql - \eи связанными с ней командами (Лауренц Альбе)- При очень быстром редактировании файла можно было ввести в заблуждение проверку изменения временного файла, отслеживающую время изменения файла. 
- Исправление в pg_dump выгрузки генерируемых столбцов для секционированных таблиц (Питер Эйзентраут) § - Исправление, вошедшее в предыдущий корректирующий выпуск, не должно было затрагивать секционированные таблицы; оно должно распространяться только на обычные наследуемые таблицы. 
- Добавление недостающей проверки версии файла в pg_restore (Том Лейн) § - При чтении архива в специальном формате из источника, не поддерживающего позиционирование, утилита pg_restore забывала проверить версию архива. В случае загрузки архива более новой версии, чем она поддерживает, впоследствии могла возникнуть путаница. 
- Добавление в pg_upgrade дополнительных проверок на наличие в пользовательских таблицах типов, не поддерживающих обновление (Том Лейн) § - Усовершенствование выявления случаев, когда тип, не поддерживающий обновление, оказывается внутри типа-контейнера (например, в типе массива или диапазона). Также теперь запрещается обновление, если пользовательские таблицы содержат системные составные типа, так как OID таких типов может меняться от версии к версии. 
- Исправление некорректного расчёта прогресса в pg_checksums (Синъя Като) § 
- Исправление в pg_waldump подсчёта записей - XACTпри сборе статистики по записям (Кётаро Хоригути) §
- Ликвидация в - contrib/amcheckошибочного проверочного утверждения, не допускающего одновременно установленные в кортеже флаги- HEAP_XMAX_LOCK_ONLYи- HEAP_KEYS_UPDATED(Жюльен Руо)- Такое состояние вполне легально после - SELECT FOR UPDATE.
- Корректировка правил сборки с VPATH для совместимости с последними версиями компилятора Oracle Developer Studio (Ной Миш) § 
- Исправление тестирования языка PL/Python для Python 3 в ОС Solaris (Ной Миш) §