E.43. Выпуск 11.12
Дата выпуска: 2021-05-13
В этот выпуск вошли различные исправления, внесённые после версии 11.11. За информацией о нововведениях версии 11 обратитесь к Разделу E.55.
E.43.1. Миграция на версию 11.12
Если используется версия 11.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 11.11, см. также Раздел E.44.
E.43.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должна применяться только к корню дерева секционирования.Запрещение пометки допустимости 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.
Устранение разнообразных незначительных утечек памяти в коде сервера (Том Лейн, Андрес Фройнд)
Ликвидация ошибки, возникавшей в блоке PL/pgSQL
DO, в котором используются переменные составного типа и при этом осуществляется управление транзакциями (Том Лейн)Ранее в таком случае выдавалось сообщение об утечке дескрипторов кортежей.
Предотвращение бесконечного цикла в 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 (Ной Миш)
E.43. Release 11.12
Release date: 2021-05-13
This release contains a variety of fixes from 11.11. For information about new features in major release 11, see Section E.55.
E.43.1. Migration to Version 11.12
A dump/restore is not required for those running 11.X.
However, if you are upgrading from a version earlier than 11.11, see Section E.44.
E.43.2. Changes
Prevent integer overflows in array subscripting calculations (Tom Lane)
The array code previously did not complain about cases where an array's lower bound plus length overflows an integer. This resulted in later entries in the array becoming inaccessible (since their subscripts could not be written as integers), but more importantly it confused subsequent assignment operations. This could lead to memory overwrites, with ensuing crashes or unwanted data modifications. (CVE-2021-32027)
Fix mishandling of “junk” columns in
INSERT ... ON CONFLICT ... UPDATEtarget lists (Tom Lane)If the
UPDATElist contains any multi-column sub-selects (which give rise to junk columns in addition to the results proper), theUPDATEpath would end up storing tuples that include the values of the extra junk columns. That's fairly harmless in the short run, but if new columns are added to the table then the values would become accessible, possibly leading to malfunctions if they don't match the datatypes of the added columns.In addition, in versions supporting cross-partition updates, a cross-partition update triggered by such a case had the reverse problem: the junk columns were removed from the target list, typically causing an immediate crash due to malfunction of the multi-column sub-select mechanism. (CVE-2021-32028)
Fix possibly-incorrect computation of
UPDATE ... RETURNINGoutputs for joined cross-partition updates (Amit Langote, Etsuro Fujita)If an
UPDATEfor a partitioned table caused a row to be moved to another partition with a physically different row type (for example, one with a different set of dropped columns), computation ofRETURNINGresults for that row could produce errors or wrong answers. No error is observed unless theUPDATEinvolves other tables being joined to the target table. (CVE-2021-32029)Fix adjustment of constraint deferrability properties in partitioned tables (Álvaro Herrera)
When applied to a foreign-key constraint of a partitioned table,
ALTER TABLE ... ALTER CONSTRAINTfailed to adjust theDEFERRABLEand/orINITIALLY DEFERREDmarkings of the constraints and triggers of leaf partitions. This led to unexpected behavior of such constraints. After updating to this version, any misbehaving partitioned tables can be fixed by executing a newALTERcommand to set the desired properties.This change also disallows applying such an
ALTERdirectly to the constraints of leaf partitions. The only supported case is for the whole partitioning hierarchy to have identical constraint properties, so suchALTERs must be applied at the partition root.Forbid marking an identity column as nullable (Vik Fearing)
GENERATED ... AS IDENTITYimpliesNOT NULL, so don't allow it to be combined with an explicitNULLspecification.Allow
ALTER ROLE/DATABASE ... SETto set therole,session_authorization, andtemp_buffersparameters (Tom Lane)Previously, over-eager validity checks might reject these commands, even if the values would have worked when used later. This created a command ordering hazard for dump/reload and upgrade scenarios.
Fix bug with coercing the result of a
COLLATEexpression to a non-collatable type (Tom Lane)This led to a parse tree in which the
COLLATEappears to be applied to a non-collatable value. While that normally has no real impact (sinceCOLLATEhas no effect at runtime), it was possible to construct views that would be rejected during dump/reload.Disallow calling window functions and procedures via the “fast path” wire protocol message (Tom Lane)
Only plain functions are supported here. While trying to call an aggregate function failed already, calling a window function would crash, and calling a procedure would work only if the procedure did no transaction control.
Extend
pg_identify_object_as_address()to support event triggers (Joel Jacobson)Fix
to_char()'s handling of Roman-numeral month format codes with negative intervals (Julien Rouhaud)Previously, such cases would usually cause a crash.
Check that the argument of
pg_import_system_collations()is a valid schema OID (Tom Lane)Fix use of uninitialized value while parsing an
\{quantifier in a BRE-mode regular expression (Tom Lane)m,n\}This error could cause the quantifier to act non-greedy, that is behave like an
{quantifier would do in full regular expressions.m,n}?Don't ignore system columns when estimating the number of groups using extended statistics (Tomas Vondra)
This led to strange estimates for queries such as
SELECT ... GROUP BY a, b, ctid.Avoid divide-by-zero when estimating selectivity of a regular expression with a very long fixed prefix (Tom Lane)
This typically led to a
NaNselectivity value, causing assertion failures or strange planner behavior.Fix access-off-the-end-of-the-table error in BRIN index bitmap scans (Tomas Vondra)
If the page range size used by a BRIN index isn't a power of two, there were corner cases in which a bitmap scan could try to fetch pages past the actual end of the table, leading to “could not open file” errors.
Avoid incorrect timeline change while recovering uncommitted two-phase transactions from WAL (Soumyadeep Chakraborty, Jimmy Yih, Kevin Yeap)
This error could lead to subsequent WAL records being written under the wrong timeline ID, leading to consistency problems, or even complete failure to be able to restart the server, later on.
Ensure that locks are released while shutting down a standby server's startup process (Fujii Masao)
When a standby server is shut down while still in recovery, some locks might be left held. This causes assertion failures in debug builds; it's unclear whether any serious consequence could occur in production builds.
Fix crash when a logical replication worker does
ALTER SUBSCRIPTION REFRESH(Peter Smith)The core code won't do this, but a replica trigger could.
Ensure we default to
wal_sync_method=fdatasyncon recent FreeBSD (Thomas Munro)FreeBSD 13 supports
open_datasync, which would normally become the default choice. However, it's unclear whether that is actually an improvement for Postgres, so preserve the existing default for now.Ensure we finish cleaning up when interrupted while detaching a DSM segment (Thomas Munro)
This error could result in temporary files not being cleaned up promptly after a parallel query.
Fix memory leak while initializing server's SSL parameters (Michael Paquier)
This is ordinarily insignificant, but if the postmaster is repeatedly sent SIGHUP signals, the leak can build up over time.
Fix assorted minor memory leaks in the server (Tom Lane, Andres Freund)
Fix failure when a PL/pgSQL
DOblock makes use of both composite-type variables and transaction control (Tom Lane)Previously, such cases led to errors about leaked tuple descriptors.
Prevent infinite loop in libpq if a ParameterDescription message with a corrupt length is received (Tom Lane)
When initdb prints instructions about how to start the server, make the path shown for pg_ctl use backslash separators on Windows (Nitin Jadhav)
Fix psql to restore the previous behavior of
\connect service=(Tom Lane)somethingA previous bug fix caused environment variables (such as
PGPORT) to override entries in the service file in this context. Restore the previous behavior, in which the priority is the other way around.Fix race condition in detection of file modification by psql's
\eand related commands (Laurenz Albe)A very fast typist could fool the code's file-timestamp-based detection of whether the temporary edit file was changed.
Fix missed file version check in pg_restore (Tom Lane)
When reading a custom-format archive from a non-seekable source, pg_restore neglected to check the archive version. If it was fed a newer archive version than it can support, it would fail messily later on.
Add some more checks to pg_upgrade for user tables containing non-upgradable data types (Tom Lane)
Fix detection of some cases where a non-upgradable data type is embedded within a container type (such as an array or range). Also disallow upgrading when user tables contain columns of system-defined composite types, since those types' OIDs are not stable across versions.
Fix pg_waldump to count
XACTrecords correctly when generating per-record statistics (Kyotaro Horiguchi)Fix
contrib/amcheckto not complain about the tuple flagsHEAP_XMAX_LOCK_ONLYandHEAP_KEYS_UPDATEDboth being set (Julien Rouhaud)This is a valid state after
SELECT FOR UPDATE.Adjust VPATH build rules to support recent Oracle Developer Studio compiler versions (Noah Misch)
Fix testing of PL/Python for Python 3 on Solaris (Noah Misch)