E.50. Выпуск 11.5
Дата выпуска: 2019-08-08
В этот выпуск вошли различные исправления, внесённые после версии 11.4. За информацией о нововведениях версии 11 обратитесь к Разделу E.55.
E.50.1. Миграция на версию 11.5
Если используется версия 11.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 11.1, см. также Раздел E.54.
E.50.2. Изменения
Требование указания схемы при приведении к временному типу с использованием синтаксиса вызова функции (Ной Миш)
Мы давно требуем, чтобы вызов временных функций записывался с явным указанием временной схемы, примерно так:
pg_temp.. Теперь её необходимо указывать и в приведении к временным типам с использованием функциональной записи:имя_функции(аргументы)pg_temp.. В противном случае имеется возможность перехватить вызов функции, используя временный объект, что позволит повысить привилегии примерно тем же способом, который мы блокировали в CVE-2007-2138. (CVE-2019-10208)имя_типа(аргумент)Исправление объединения вложенных планов по хешу, требующего межтипового сравнения (Том Лейн, Андреас Зельтенрейх)
Во вложенных планах, объединяемых по хешу, для сравнения элементов хеш-таблицы использовался оператор сравнения для внешнего запроса. Но это может быть некорректно для межтипового оператора, так как на самом деле все элементы таблицы будут иметь выходной тип подзапроса. Для набора межтиповых операторов сравнения хешей, встроенных в ядро PostgreSQL, в 64-битных системах эта ошибка практически безобидна, но в 32-битных она могла приводить к краху или неавторизованному доступу к памяти сервера. Расширения могли создавать межтиповые операторы сравнения, несущие ещё большую угрозу. (CVE-2019-10209)
Устранение сбоя в
ALTER TABLE ... ALTER COLUMN TYPEпри изменении типов нескольких столбцов в одной команде (Том Лейн)Тем самым устранена регрессия, которая появилась в предыдущих корректирующих выпусках: индексы, построенные по модифицируемым столбцам, обрабатывались неправильно, что приводило к странным ошибкам в процессе
ALTER TABLE.Недопущение удаления триггера секционированной таблицы, если имеются события из дочерних таблиц, ожидающие обработки триггером (Альваро Эррера)
Прежде всего это касается ограничений внешних ключей, так как они реализуются триггерами.
Сохранение определённых пользователем аргументов триггера при копировании определения триггера из секционированной таблицы в её секцию (Патрик Макхарди)
Корректировка зависимостей с целью недопущения удаления столбцов в ключе секционирования (Том Лейн)
Команда
ALTER TABLE ... DROP COLUMNне позволяет непосредственно удалить столбец, входящий в ключ разбиения. Однако при косвенном удалении (например, при каскадном удалении, начиная с типа данных этого столбца) необходимая проверка не выполнялась, что позволяло удалить ключевой столбец. В результате секционированная таблица приходила в негодность — обратиться к ней было нельзя и удалить её тоже.В результате этого исправления в
pg_dependдобавляются записи, гарантирующие, что при каскадном удалении ключевого столбца будет удалён не только он, но и вся секционированная таблица. Заметьте, что такие записи будут добавляться только при создании секционированной таблицы; то есть данное исправление не устраняет риск повреждения уже существующих секционированных таблиц. Однако проблема может возникнуть только со столбцами в ключе разбиения, которые имеют пользовательские типы данных, поэтому это не должно представлять угрозы для большинства пользователей.Исправление соответствия номеров столбцов между секционированной таблицей и её секцией по умолчанию (Амит Ланготе)
Некоторые операции выполнялись некорректно, если точное соответствие нарушалось, например, когда какие-либо столбцы удалялись в одной таблице, но оставались в другой.
Исключение из рассмотрения сторонних таблиц при создании индексов в секционированных таблицах (Альваро Эррера)
Ранее, если во время этой операции встречалась сторонняя таблица, выдавалась ошибка, что, однако, не решало никакие реальные проблемы.
Устранение секции по умолчанию в запросах к секционированной таблице в большем количестве случаев (Юзуко Хосоя)
Исправление ошибки, мешавшей корректно устранять секции при наличии в ключе разбиения множества столбцов типа
boolean(Дэвид Роули)Сохранение в
GROUP BYзначимости столбцов таблицы-родителя в иерархии наследования (Дэвид Роули)Обычно когда в предложении
GROUP BYфигурируют столбцы первичного ключа таблицы, все остальные группирующие столбцы можно считать незначащими, так как первых вполне достаточно для получения уникальных групп. Но такая оптимизация некорректна, если запрос также обращается к дочерним таблицам — уникальность в родительской таблице не распространяется на дочерние.Исправление ошибки при выполнении параллельного соединения по хешу в запросах с неполным соединением (Томас Манро)
Вследствие этой ошибки в результатах некоторых запросов с
EXISTSмогли задваиваться строки.Устранение ненужных этапов сортировки в некоторых запросах с предложением
GROUPING SETS(Эндрю Гирт, Ричард Гуо)Исправление ошибки при определении планировщиком крайних значений в индексе (Том Лейн)
При использовании только что созданного индекса для определения минимального или максимального значения в столбце планировщик мог выбрать кортеж, который потерял актуальность и на самом деле не содержит граничное значение. В худшем случае этот кортеж мог содержать NULL, что приводило к явной ошибке «found unexpected null value in index» (в индексе найдено неожиданное значение NULL), хотя с большей вероятностью всё заканчивалось выбором неверного значения, приводящим к ухудшению оценок планировщика.
Устранение сбоя при обращении к переходным таблицам триггера в процессе перепроверок
EvalPlanQual(Александр Акципетров)Триггеры, работающие с переходными таблицами, иногда могли ломаться при одновременном изменении таблиц.
Исправление поведения внешних ключей, содержащих несколько столбцов, при перестроении ограничения внешнего ключа (Том Лейн)
Команда
ALTER TABLEмогла неправильно определять, нужно ли перепроверять внешний ключ, если столбцы в ключе имели разные типы. По всей видимости проявлялось это всегда консервативным образом, то есть перепроверка производилась и тогда, когда это не требовалось.Отключение сбора расширенной статистики в деревьях наследования (Томаш Вондра)
Это устраняет ошибку с сообщением «tuple already updated by self» (кортеж уже изменился сам) в процессе
ANALYZE.Устранение неоправданных взаимоблокировок при повышении уровня блокировки кортежа (Алексей Клюкин)
Когда две или более транзакций ждут, пока транзакция T1 освободит блокировку на уровне кортежа, а T1 при этом повышает уровень блокировки, по завершении T1 между этими ожидающими транзакциями может возникнуть неоправданная взаимоблокировка.
Устранение проблемы при разрешении взаимоблокировок, в которых задействовано несколько параллельных исполнителей (Жуй Хай Цзян)
Маловероятно, что эту ошибку можно было получить не синтетическими запросами, но в этом исключительном случае запросы, попавшие в ситуацию взаимоблокировки (в идеале разрешаемую автоматически), потребовалось бы отменить вручную.
Исправление преобразования диапазонов дат с бесконечными границами
infinityс приведением их к канонической форме (Лауренц Альбе)Если граница диапазона — бесконечность, пытаться преобразовать открытый диапазон в закрытый и наоборот путём увеличения или уменьшения граничного значения нельзя. Поэтому в подобных случаях диапазон не должен изменяться.
Ликвидирована потеря дробных цифр при приведении очень больших значений типа
moneyк типуnumeric(Том Лейн)Исправление печатного представления WAL-записей
BTREE_META_CLEANUP(Микаэль Пакье)Устранение сбоев проверок истинности в результате некорректной обработки метастраниц индекса btree версии 2 (Питер Гейган)
Исправление ассемблерного кода циклических блокировок для процессоров MIPS, чтобы он корректно работал на MIPS r6 (ЮньЦян Су)
Назначение записи или кортежу, возвращаемым функцией PL/pgSQL, составного типа результата функции (Том Лейн)
Тем самым устраняются проблемы, возникавшие при сохранении результата непосредственно в таблице.
Игнорирование символа перевода каретки (
\r) при разборе файлов описаний служб в libpq (Том Лейн, Микаэль Пакье)В некоторых случаях такие файлы с переводами строк в стиле Windows могли разбираться неправильно, что проявлялось в ошибках при подключении.
Исключение некорректных вариантов дополнения табуляцией, предлагаемых после
SETв psql (Том Лейн)переменная=Устранение небольшой утечки памяти в psql при выполнении команды
\d(Том Лейн)Исправление в pg_dump порядка вывода пользовательских классов операторов (Том Лейн)
Если пользовательский класс операторов оказывался классом операторов подтипа для пользовательского диапазонного типа, связанные объекты выводились в неправильном порядке; в результате выгруженные данные нельзя было восстановить. (Нижележащая ошибка в обработке зависимости классов операторов могла проявляться и в других случаях, но зафиксирован только этот.)
Устранение возможности зависания pgbench при использовании ключа
-R(Фабьен Коэльо)Повышена надёжность проверки индексов в
contrib/amcheck(Питер Гейган)Исправлена обработка значений Perl
undefвcontrib/jsonb_plperl(Иван Панченко)Обеспечение в
contrib/passwordcheckвозможности сосуществования с другими пользователями функцииcheck_password_hook(Микаэль Пакье)Исправление проверок
contrib/sepgsqlдля поддержки последних версий SELinux (Майк Пальмиотто)Улучшение стабильности регрессионных тестов
src/test/kerberosиsrc/test/ldap(Томас Манро, Том Лейн)Улучшение стабильности регрессионных тестов
src/test/recovery(Микаэль Пакье)Уменьшение объёма вывода в stderr в тестировочном скрипте pg_upgrade (Том Лейн)
Исправление регрессионных тестов pgbench в части поддержки Windows (Фабьен Коэльо)
Исправление TAP-тестов для совместимости с Perl из среды msys в случаях, когда каталог сборки находится не внутри точки монтирования корня msys (Ной Миш)
Обеспечение поддержки сборки Postgres с использованием Microsoft Visual Studio 2019 (Харибабу Комми)
При сборке проектов Visual Studio переменная окружения
WindowsSDKVersionне должна игнорироваться, если она установлена (Пэйфэн Цю)Это исправление решает проблемы сборки в некоторых конфигурациях.
Поддержка в проектах Visual Studio библиотеки OpenSSL версии 1.1.0 и выше (Хуан Хосе Сантамария Флеча, Микаэль Пакье)
Возможность передачи параметров make нижележащей утилите gmake при вызове на верхнем уровне make не из комплекта GNU (Томас Манро)
Недопущение выбора вариантов
localtimeиposixrulesв качестве значенияTimeZoneв процессе initdb (Том Лейн)В некоторых случаях программа initdb могла выбирать одно из таких имён несуществующих часовых поясов вместо имени «настоящего» часового пояса. Этим двум именам будет предпочитаться любое другое, представляющее часовой пояс на уровне C.
Изменение представления
pg_timezone_names: часовой поясFactoryбудет отображаться, только если он имеет короткую аббревиатуру (Том Лейн)В прошлом администрация IANA ввела этот искусственный пояс с «аббревиатурой»
Local time zone must be set--see zic manual page(Должен быть задан местный часовой пояс -- см. страницу руководства zic). Современные версии базы данных tzdb содержат для него аббревиатуру-00, но на ряде платформ эта база модифицируется так, что из неё продолжают исходить подобные старинные написания. Поэтому решено показывать этот часовой пояс, только если его аббревиатура действительно кратка.Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией 2019b (Том Лейн)
В результате была добавлена поддержка нового ключа
-b slimпрограммы zic, что позволяет уменьшить размер устанавливаемых файлов часовых поясов. Эта возможность может пригодиться нам в будущем.Обновление данных часовых поясов до версии tzdata 2019b, включающее изменение правил перехода на летнее время в Бразилии, а также корректировку исторических данных для Гонконга, Италии и Палестины.
E.50. Release 11.5
Release date: 2019-08-08
This release contains a variety of fixes from 11.4. For information about new features in major release 11, see Section E.55.
E.50.1. Migration to Version 11.5
A dump/restore is not required for those running 11.X.
However, if you are upgrading from a version earlier than 11.1, see Section E.54.
E.50.2. Changes
Require schema qualification to cast to a temporary type when using functional cast syntax (Noah Misch)
We have long required invocations of temporary functions to explicitly specify the temporary schema, that is
pg_temp.. Require this as well for casting to temporary types using functional notation, for examplefunc_name(args)pg_temp.. Otherwise it's possible to capture a function call using a temporary object, allowing privilege escalation in much the same ways that we blocked in CVE-2007-2138. (CVE-2019-10208)type_name(arg)Fix execution of hashed subplans that require cross-type comparison (Tom Lane, Andreas Seltenreich)
Hashed subplans used the outer query's original comparison operator to compare entries of the hash table. This is the wrong thing if that operator is cross-type, since all the hash table entries will be of the subquery's output type. For the set of hashable cross-type operators in core PostgreSQL, this mistake seems nearly harmless on 64-bit machines, but it can result in crashes or perhaps unauthorized disclosure of server memory on 32-bit machines. Extensions might provide hashable cross-type operators that create larger risks. (CVE-2019-10209)
Fix failure of
ALTER TABLE ... ALTER COLUMN TYPEwhen altering multiple columns' types in one command (Tom Lane)This fixes a regression introduced in the most recent minor releases: indexes using the altered columns were not processed correctly, leading to strange failures during
ALTER TABLE.Prevent dropping a partitioned table's trigger if there are pending trigger events in child partitions (Álvaro Herrera)
This notably applies to foreign key constraints, since those are implemented by triggers.
Include user-specified trigger arguments when copying a trigger definition from a partitioned table to one of its partitions (Patrick McHardy)
Install dependencies to prevent dropping partition key columns (Tom Lane)
ALTER TABLE ... DROP COLUMNwill refuse to drop a column that is a partition key column. However, indirect drops (such as a cascade from dropping a key column's data type) had no such check, allowing the deletion of a key column. This resulted in a badly broken partitioned table that could neither be accessed nor dropped.This fix adds
pg_dependentries that enforce that the whole partitioned table, not just the key column, will be dropped if a cascaded drop forces removal of the key column. However, such entries will only be created when a partitioned table is created; so this fix does not remove the risk for pre-existing partitioned tables. The issue can only arise for partition key columns of non-built-in data types, so it seems not to be a hazard for most users.Ensure that column numbers are correctly mapped between a partitioned table and its default partition (Amit Langote)
Some operations misbehaved if the mapping wasn't exactly one-to-one, for example if there were dropped columns in one table and not the other.
Ignore partitions that are foreign tables when creating indexes on partitioned tables (Álvaro Herrera)
Previously an error was thrown on encountering a foreign-table partition, but that's unhelpful and doesn't protect against any actual problem.
Prune a partitioned table's default partition (that is, avoid uselessly scanning it) in more cases (Yuzuko Hosoya)
Fix possible failure to prune partitions when there are multiple partition key columns of
booleantype (David Rowley)Don't optimize away
GROUP BYcolumns when the table involved is an inheritance parent (David Rowley)Normally, if a table's primary key column(s) are included in
GROUP BY, it's safe to drop any other grouping columns, since the primary key columns are enough to make the groups unique. This rule does not work if the query is also reading inheritance child tables, though; the parent's uniqueness does not extend to the children.Avoid incorrect use of parallel hash join for semi-join queries (Thomas Munro)
This error resulted in duplicate result rows from some
EXISTSqueries.Avoid using unnecessary sort steps for some queries with
GROUPING SETS(Andrew Gierth, Richard Guo)Fix possible failure of planner's index endpoint probes (Tom Lane)
When using a recently-created index to determine the minimum or maximum value of a column, the planner could select a recently-dead tuple that does not actually contain the endpoint value. In the worst case the tuple might contain a null, resulting in a visible error “found unexpected null value in index”; more likely we would just end up using the wrong value, degrading the quality of planning estimates.
Fix failure to access trigger transition tables during
EvalPlanQualrechecks (Alex Aktsipetrov)Triggers that rely on transition tables sometimes failed in the presence of concurrent updates.
Fix mishandling of multi-column foreign keys when rebuilding a foreign key constraint (Tom Lane)
ALTER TABLEcould make an incorrect decision about whether revalidation of a foreign key is necessary, if not all columns of the key are of the same type. It seems likely that the error would always have been in the conservative direction, that is revalidating unnecessarily.Don't build extended statistics for inheritance trees (Tomas Vondra)
This avoids a “tuple already updated by self” error during
ANALYZE.Avoid spurious deadlock errors when upgrading a tuple lock (Oleksii Kliukin)
When two or more transactions are waiting for a transaction T1 to release a tuple-level lock, and T1 upgrades its lock to a higher level, a spurious deadlock among the waiting transactions could be reported when T1 finishes.
Fix failure to resolve deadlocks involving multiple parallel worker processes (Rui Hai Jiang)
It is not clear whether this bug is reachable with non-artificial queries, but if it did happen, the queries involved in an otherwise-resolvable deadlock would block until canceled.
Prevent incorrect canonicalization of date ranges with
infinityendpoints (Laurenz Albe)It's incorrect to try to convert an open range to a closed one or vice versa by incrementing or decrementing the endpoint value, if the endpoint is infinite; so leave the range alone in such cases.
Fix loss of fractional digits when converting very large
moneyvalues tonumeric(Tom Lane)Fix printing of
BTREE_META_CLEANUPWAL records (Michael Paquier)Prevent assertion failures due to mishandling of version-2 btree metapages (Peter Geoghegan)
Fix spinlock assembly code for MIPS CPUs so that it works on MIPS r6 (YunQiang Su)
Ensure that a record or row value returned from a PL/pgSQL function is marked with the function's declared composite type (Tom Lane)
This avoids problems if the result is stored directly into a table.
Make libpq ignore carriage return (
\r) in connection service files (Tom Lane, Michael Paquier)In some corner cases, service files containing Windows-style newlines could be mis-parsed, resulting in connection failures.
In psql, avoid offering incorrect tab completion options after
SET(Tom Lane)variable=Fix a small memory leak in psql's
\dcommand (Tom Lane)Fix pg_dump to ensure that custom operator classes are dumped in the right order (Tom Lane)
If a user-defined opclass is the subtype opclass of a user-defined range type, related objects were dumped in the wrong order, producing an unrestorable dump. (The underlying failure to handle opclass dependencies might manifest in other cases too, but this is the only known case.)
Fix possible lockup in pgbench when using
-Roption (Fabien Coelho)Improve reliability of
contrib/amcheck's index verification (Peter Geoghegan)Fix handling of Perl
undefvalues incontrib/jsonb_plperl(Ivan Panchenko)Fix
contrib/passwordcheckto coexist with other users ofcheck_password_hook(Michael Paquier)Fix
contrib/sepgsqltests to work under recent SELinux releases (Mike Palmiotto)Improve stability of
src/test/kerberosandsrc/test/ldapregression tests (Thomas Munro, Tom Lane)Improve stability of
src/test/recoveryregression tests (Michael Paquier)Reduce stderr output from pg_upgrade's test script (Tom Lane)
Fix pgbench regression tests to work on Windows (Fabien Coelho)
Fix TAP tests to work with msys Perl, in cases where the build directory is on a non-root msys mount point (Noah Misch)
Support building Postgres with Microsoft Visual Studio 2019 (Haribabu Kommi)
In Visual Studio builds, honor
WindowsSDKVersionenvironment variable, if that's set (Peifeng Qiu)This fixes build failures in some configurations.
Support OpenSSL 1.1.0 and newer in Visual Studio builds (Juan José Santamaría Flecha, Michael Paquier)
Allow make options to be passed down to gmake when non-GNU make is invoked at the top level (Thomas Munro)
Avoid choosing
localtimeorposixrulesasTimeZoneduring initdb (Tom Lane)In some cases initdb would choose one of these artificial zone names over the “real” zone name. Prefer any other match to the C library's timezone behavior over these two.
Adjust
pg_timezone_namesview to show theFactorytime zone if and only if it has a short abbreviation (Tom Lane)Historically, IANA set up this artificial zone with an “abbreviation” like
Local time zone must be set--see zic manual page. Modern versions of the tzdb database show-00instead, but some platforms alter the data to show one or another of the historical phrases. Show this zone only if it uses the modern abbreviation.Sync our copy of the timezone library with IANA tzcode release 2019b (Tom Lane)
This adds support for zic's new
-b slimoption to reduce the size of the installed zone files. We are not currently using that, but may enable it in future.Update time zone data files to tzdata release 2019b for DST law changes in Brazil, plus historical corrections for Hong Kong, Italy, and Palestine.