E.8. Выпуск 9.6.17
Дата выпуска: 2020-02-13
В этот выпуск вошли различные исправления, внесённые после версии 9.6.16. За информацией о нововведениях версии 9.6 обратитесь к Разделу E.25.
E.8.1. Миграция на версию 9.6.17
Если используется версия 9.6.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 9.6.16, см. Раздел E.9.
E.8.2. Изменения
Добавление отсутствовавших проверок прав для
ALTER ... DEPENDS ON EXTENSION
(Альваро Эррера)При обозначении объекта зависимым от расширения никакие проверки прав доступа не выполнялись. В результате этого упущения любой пользователь мог сделать так, чтобы процедуры, триггеры, матпредставления или индексы можно было удалить, имея право удалить какое-либо расширение. Теперь требуется, чтобы выполняющий эту команду пользователь был владельцем целевого объекта (это значит, что он сам может удалить этот объект). (CVE-2020-1720)
Устранение сбоя при логическом декодировании в случаях, когда большую транзакцию приходится сохранять во множестве отдельных временных файлов (Амит Хандекар)
Ликвидация сбоя, возникавшего в подписчике логической репликации после отказа и перезапуска базы данных (Вигнеш Си)
Предотвращение преждевременного отключения узлов плана Gather или GatherMerge, находящихся под узлом Limit (Амит Капила)
Тем самым устраняется возможность ошибки в случае, когда этот узел плана нужно сканировать многократно, например, если он оказался внутри вложенного цикла.
Устранение утечки памяти, возникавшей при нехватке свободных слотов динамической общей памяти (Томас Манро)
Аннулирование указания
CONCURRENTLY
для операций создания, удаления или перестроения индекса во временных таблицах (Микаэль Пакье, Хейкки Линнакангас, Андрес Фройнд)Тем самым исключаются странные ошибки, возникавшие с временными таблицами, для которых назначалось действие
ON COMMIT
. В любом случае, использоватьCONCURRENTLY
для временных таблиц (а это влечёт значительные издержки) не имеет смысла, так как никакие другие сеансы к таким таблицам обращаться не могут.Устранение ошибки, возникавшей при сбросе индексов по выражениям во временных таблицах с характеристикой
ON COMMIT DELETE ROWS
(Том Лейн)Ликвидация возможности сбоя при операциях с индексом BRIN, в котором используются типы данных
box
,range
иinet
(Хейкки Линнакангас)Исправление обработки удалённых страниц в индексах GIN (Александр Коротков)
В результате устранены риски возникновения взаимоблокировок, некорректного обновления состояния удалённой страницы, а также риск ошибки при обходе недавно удалённой страницы.
Предотвращение сбоя, возможного при выполнении вложенного
SELECT
(узла SubPlan) в спискеVALUES
, выдающем несколько строк (Том Лейн)Предупреждение маловероятного риска сбоя при передаче переходного состояния агрегата по ссылке (Андрес Фройнд, Фёдор Сигаев)
Улучшение вывода ошибок в функциях
to_date()
иto_timestamp()
(Том Лейн, Альваро Эррера)Сообщения о неправильном названии месяца или дня во входных строках могли обрезаться в середине многобайтного символа, в результате чего сообщение могло быть неприемлемым для выбранной кодировки, что вызывало ошибки при дальнейшей его обработке. Теперь эти сообщения будут обрезаться по следующему пробельному символу.
Устранение ошибочного сдвига на 1 результата функции
EXTRACT(ISOYEAR FROM
с датами до нашей эры (Том Лейн)timestamp
)Недопущение переполнения стека при обращении к представлениям
information_schema
в случае существования в системных каталогах представлений, которые ссылаются на себя же (Том Лейн)Представление, ссылающееся на себя, работать не будет, так как при обращении к нему возникнет бесконечная рекурсия. Мы обрабатывали это корректно при попытке чтения из такого представления, но не учли, что зацикливание возможно и при проверке представлений на предмет поддержки автообновления.
Увеличение производительности соединений по хешу с очень большими внутренними отношениями (Томас Манро)
Предотвращение сбоев в особых случаях и исправление неверных оценок при вычислении избирательности для операторов диапазона
<@
и@>
(Микаэль Пакье, Андрей Бородин, Том Лейн)Улучшено информирование об ошибках при попытках использовать автоматическое обновление представлений с правилами
INSTEAD
по условию (Дин Рашид)Это не поддерживалось и раньше, но ошибка проявлялась только во время выполнения запроса, так что её могли скрыть другие ошибки планировщика.
Недопущение включения составного типа в себя же косвенным образом через диапазонный тип (Том Лейн, Жюльен Руо)
Корректировка сообщения об ошибке при попытке создать индекс по выражению с недопустимыми типами (Амит Ланготе)
Исправление выгрузки представлений, содержащих только список
VALUES
, после переименования выходного столбца представления (Том Лейн)Исправление поведения
NOTIFY
, чтобы поступающие уведомления передавались клиенту доReadyForQuery
, а не после (Том Лейн)В результате гарантируется, что с libpq и другими клиентскими библиотеками, работающими по тому же алгоритму, клиент сможет получить все уведомления к моменту, когда транзакция будет считаться завершённой. Возможно, это не имеет большого значения для реальных приложений (так как им в любом случае придётся иметь дело с асинхронными уведомлениями), но это упрощает создание тестов с воспроизводимым поведением.
Реализация в libpq возможности разобрать все связанные с GSS параметры подключения даже при компиляции кода без поддержки GSSAPI (Том Лейн)
Таким образом в этом аспекте устранено отличие от поддержки SSL, в отношении которой давно было принято решение, что имеет смысл всегда принимать все параметры, даже если они игнорируются или не могут работать в связи с отсутствием некоторой функциональности в конкретной сборке.
Исправление некорректной обработки кодов формата
%b
и%B
в функции ecpgPGTYPEStimestamp_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
.Устранение условий гонки, при которых могла задерживаться доставка межпроцессорных сигналов в Windows (Амит Капила)
В частности, это проявлялось в странных нарушениях синхронизации сообщений
NOTIFY
.Добавление нескольких повторений для операции открытия файла в случае получения ошибки
ERROR_ACCESS_DENIED
в Windows (Александр Лахин, Том Лейн)Это помогает справиться с ситуацией, когда попытка открыть файл не удаётся из-за того, что файл помечен для удаления, но ещё не удалён окончательно. Например, утилита pg_ctl часто сталкивалась с такой ошибкой, пытаясь определить, остановился ли главный процесс (postmaster).