E.46. Выпуск 10.12
Дата выпуска: 2020-02-13
В этот выпуск вошли различные исправления, внесённые после версии 10.11. За информацией о нововведениях версии 10 обратитесь к Разделу E.58.
E.46.1. Миграция на версию 10.12
Если используется версия 10.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 10.11, см. также Раздел E.47.
E.46.2. Изменения
- Добавление отсутствовавших проверок прав для - ALTER ... DEPENDS ON EXTENSION(Альваро Эррера)- При обозначении объекта зависимым от расширения никакие проверки прав доступа не выполнялись. В результате этого упущения любой пользователь мог сделать так, чтобы процедуры, триггеры, матпредставления или индексы можно было удалить, имея право удалить какое-либо расширение. Теперь требуется, чтобы выполняющий эту команду пользователь был владельцем целевого объекта (это значит, что он сам может удалить этот объект). (CVE-2020-1720) 
- Исправление кода подписчика логической репликации, чтобы должны образом вызывались триггеры - UPDATE, связанные со столбцами (Питер Эйзентраут)
- Устранение сбоя при логическом декодировании в случаях, когда большую транзакцию приходится сохранять во множестве отдельных временных файлов (Амит Хандекар) 
- Устранение угрозы сбоев или повреждения данных при обработке операции изменения строки подписчиком логической репликации (Том Лейн, Томаш Вондра) - Обнаруженный дефект мог проявляться, только если в таблице подписчика имелись столбцы, не копируемые с публикующего сервера, и использовались типы данных, передаваемые по ссылке. 
- Устранение в коде подписчика логической репликации сбоя, возникавшего после изменений структуры отношений, входящих в подписку (Жеан-Гийом де Рорте, Вигнеш Си) 
- Ликвидация сбоя, возникавшего в подписчике логической репликации после отказа и перезапуска базы данных (Вигнеш Си) 
- Увеличение эффективности логической репликации с применением - REPLICA IDENTITY FULL(Константин Книжник)- Когда выполняется поиск существующего кортежа в процессе операции изменения или удаления, должен возвращаться первый подходящий кортеж, а не последний. 
- Предотвращение преждевременного отключения узлов плана Gather или GatherMerge, находящихся под узлом Limit (Амит Капила) - Тем самым устраняется возможность ошибки в случае, когда этот узел плана нужно сканировать многократно, например, если он оказался внутри вложенного цикла. 
- Устранение утечки памяти, возникавшей при нехватке свободных слотов динамической общей памяти (Томас Манро) 
- Аннулирование указания - CONCURRENTLYдля операций создания, удаления или перестроения индекса во временных таблицах (Микаэль Пакье, Хейкки Линнакангас, Андрес Фройнд)- Тем самым исключаются странные ошибки, возникавшие с временными таблицами, для которых назначалось действие - ON COMMIT. В любом случае, использовать- CONCURRENTLYдля временных таблиц (а это влечёт значительные издержки) не имеет смысла, так как никакие другие сеансы к таким таблицам обращаться не могут.
- Устранение ошибки, возникавшей при сбросе индексов по выражениям во временных таблицах с характеристикой - ON COMMIT DELETE ROWS(Том Лейн)
- Ликвидация возможности сбоя при операциях с индексом BRIN, в котором используются типы данных - box,- rangeи- inet(Хейкки Линнакангас)
- Исправление обработки удалённых страниц в индексах GIN (Александр Коротков) - В результате устранены риски возникновения взаимоблокировок, некорректного обновления состояния удалённой страницы, а также риск ошибки при обходе недавно удалённой страницы. 
- Предотвращение сбоя, возможного при выполнении вложенного - SELECT(узла SubPlan) в списке- VALUES, выдающем несколько строк (Том Лейн)
- Устранения сбоя, возможного после ошибки в FileClose() (Ной Миш) - Эту проблему можно было наблюдать, только если был включён параметр - data_sync_retry, так как в противном случае ошибка в FileClose() приводит к аварийной остановке сервера (PANIC).
- Предупреждение маловероятного риска сбоя при передаче переходного состояния агрегата по ссылке (Андрес Фройнд, Фёдор Сигаев) 
- Улучшение вывода ошибок в функциях - to_date()и- to_timestamp()(Том Лейн, Альваро Эррера)- Сообщения о неправильном названии месяца или дня во входных строках могли обрезаться в середине многобайтного символа, в результате чего сообщение могло быть неприемлемым для выбранной кодировки, что вызывало ошибки при дальнейшей его обработке. Теперь эти сообщения будут обрезаться по следующему пробельному символу. 
- Устранение ошибочного сдвига на 1 результата функции - EXTRACT(ISOYEAR FROMс датами до нашей эры (Том Лейн)- timestamp)
- Недопущение переполнения стека при обращении к представлениям - information_schemaв случае существования в системных каталогах представлений, которые ссылаются на себя же (Том Лейн)- Представление, ссылающееся на себя, работать не будет, так как при обращении к нему возникнет бесконечная рекурсия. Мы обрабатывали это корректно при попытке чтения из такого представления, но не учли, что зацикливание возможно и при проверке представлений на предмет поддержки автообновления. 
- Вывод NULL в качестве времени начала транзакции для процессов walsender в - pg_stat_activity(Альваро Эррера)- Ранее в столбце - xact_startиногда могло отображаться время запуска процесса.
- Увеличение производительности соединений по хешу с очень большими внутренними отношениями (Томас Манро) 
- Предотвращение сбоев в особых случаях и исправление неверных оценок при вычислении избирательности для операторов диапазона - <@и- @>(Микаэль Пакье, Андрей Бородин, Том Лейн)
- Исключение из рассмотрения системных столбцов при обращении к расширенной статистике по самым частым значениям (Томаш Вондра) - Тем самым предотвращаются ошибки планировщика «negative bitmapset member not allowed» (отрицательный элемент в битовой карте не допускается) при выполнении запросов с системными столбцами. 
- Исправление логики индексов BRIN для поддержки гипотетических индексов BRIN (Жюльен Руо, Хейкки Линнакангас) - Ранее, если расширение, «помогающее выбрать индекс», подталкивало планировщик к плану с гипотетическим индексом BRIN, это приводило к ошибке, так как код оценки стоимости BRIN всегда пытался физически прочитать метастраницу индекса. Теперь добавлена проверка, является ли индекс гипотетическим; и в этом случае считается, что индекс имеет параметры по умолчанию. 
- Улучшено информирование об ошибках при попытках использовать автоматическое обновление представлений с правилами - INSTEADпо условию (Дин Рашид)- Это не поддерживалось и раньше, но ошибка проявлялась только во время выполнения запроса, так что её могли скрыть другие ошибки планировщика. 
- Недопущение включения составного типа в себя же косвенным образом через диапазонный тип (Том Лейн, Жюльен Руо) 
- Запрет на использование в ключе разбиения выражений, возвращающих псевдотипы, такие как - record(Том Лейн)
- Корректировка сообщения об ошибке при попытке создать индекс по выражению с недопустимыми типами (Амит Ланготе) 
- Исправление выгрузки представлений, содержащих только список - VALUES, после переименования выходного столбца представления (Том Лейн)
- Рассмотрение типов данных и правил сортировки в конструкциях - XMLTABLEпри вычислении зависимостей представления или правила (Том Лейн)- Ранее было возможно нарушить работу представления с - XMLTABLE, удалив тип, который не фигурировал нигде больше в представлении. Данное исправление не корректирует зависимости ранее существовавших представлений, но повлияет на зависимости будущих.
- Предотвращение нежелательного понижения регистра символов и сокращения параметров аутентификации RADIUS (Маркос Давид) - Ранее при разборе - pg_hba.confэти поля воспринимались как идентификаторы SQL, но это некорректно в общем случае.
- Исправление поведения - NOTIFY, чтобы поступающие уведомления передавались клиенту до- ReadyForQuery, а не после (Том Лейн)- В результате гарантируется, что с libpq и другими клиентскими библиотеками, работающими по тому же алгоритму, клиент сможет получить все уведомления к моменту, когда транзакция будет считаться завершённой. Возможно, это не имеет большого значения для реальных приложений (так как им в любом случае придётся иметь дело с асинхронными уведомлениями), но это упрощает создание тестов с воспроизводимым поведением. 
- Реализация в libpq возможности разобрать все связанные с GSS параметры подключения даже при компиляции кода без поддержки GSSAPI (Том Лейн) - Таким образом в этом аспекте устранено отличие от поддержки SSL, в отношении которой давно было принято решение, что имеет смысл всегда принимать все параметры, даже если они игнорируются или не могут работать в связи с отсутствием некоторой функциональности в конкретной сборке. 
- Исправление некорректной обработки кодов формата - %bи- %Bв функции ecpg- PGTYPEStimestamp_fmt_asc()(Томаш Вондра)- В результате ошибки со сдвигом на один с этими кодами могло выводиться неправильное название месяца либо мог произойти сбой. 
- Исправление поведения pg_dump/pg_restore в параллельном режиме в случае ошибки создания рабочих процессов (Том Лейн) 
- Предотвращение сбоя или блокировки при попытке завершить выполнение pg_dump/pg_restore сигналом (Том Лейн) 
- Рассмотрение подтипов массивов и диапазонов в поиске типов данных, не поддерживающих обновление, в pg_upgrade (Том Лейн) 
- Исправление проверки синтаксиса параметра createuser - --connection-limit(Альваро Эррера)
- Устранение сбоя в - postgres_fdwпри попытке передать удалённому серверу команду вида- UPDATE remote_tab SET (x,y) = (SELECT ...)(Том Лейн)
- Ограничение в - contrib/dict_intминимально допустимого значения- maxlenчислом 1 (Томаш Вондра)- Тем самым предотвращаются сбои с бессмысленными значениями данного параметра. 
- Введение в реализованной в - contrib/tablefuncфункции- crosstab()запрета на значения NULL в категориях (Джо Конвей)- Такой вариант использования никогда не давал разумных результатов, а на некоторых платформах мог приводить к сбою. 
- Добавление пометки - PGDLLIMPORTдля некоторых переменных GUC, связанных с тайм-аутами и статистикой, чтобы их могли использовать расширения в Windows (Паскаль Легран)- Это изменение затронуло переменные - idle_in_transaction_session_timeout,- lock_timeout,- statement_timeout,- track_activities,- track_countsи- track_functions.
- Устранение утечки памяти в коде проверки целостности контекстов памяти «slab» (Томаш Вондра) - Это не является проблемой в производственных сборках, так как в них проверка контекстов памяти обычно отключена; однако утечка могла быть весьма заметной в отладочных сборках. 
- Устранение дублирования статистических записей, выдаваемых механизмом сбора статистики LWLock (Фудзии Масао) - Код статистики LWLock (он не собирается по умолчанию, но может быть собран при компиляции с ключом - -DLWLOCK_STATS) мог в результате некорректного формирования ключа хеш-таблицы выдавать несколько записей для одного сочетания блокировки и обслуживающего процесса.
- Устранение условий гонки, при которых могла задерживаться доставка межпроцессорных сигналов в Windows (Амит Капила) - В частности, это проявлялось в странных нарушениях синхронизации сообщений - NOTIFY.
- Добавление нескольких повторений для операции открытия файла в случае получения ошибки - ERROR_ACCESS_DENIEDв Windows (Александр Лахин, Том Лейн)- Это помогает справиться с ситуацией, когда попытка открыть файл не удаётся из-за того, что файл помечен для удаления, но ещё не удалён окончательно. Например, утилита pg_ctl часто сталкивалась с такой ошибкой, пытаясь определить, остановился ли главный процесс (postmaster).