E.57. Выпуск 10.1
Дата выпуска: 2017-11-09
В этот выпуск вошли различные исправления, внесённые после версии 10.0. За информацией о нововведениях версии 10 обратитесь к Разделу E.58.
E.57.1. Миграция на версию 10.1
Если используется версия 10.X, выгрузка/восстановление базы не требуется.
Однако если вы используете индексы BRIN, прочитайте четвёртую запись в списке изменений.
E.57.2. Изменения
Обеспечение проверки разрешений на уровне таблиц и политик RLS при выполнении
INSERT ... ON CONFLICT DO UPDATE
во всех случаях (Дин Рашид)Путь изменения данных в команде
INSERT ... ON CONFLICT DO UPDATE
требовал наличия разрешенияSELECT
для всех столбцов в решающем индексе, но в случае указания решающего ограничения по имени должная проверка отсутствовала. Кроме того, для таблиц с включённой защитой на уровне строк не проверялось, соответствуют ли изменённые строки политикамSELECT
(вне зависимости от способа задания решающего индекса). (CVE-2017-15099)Устранение сбоя при несовпадении типа записи в
json{b}_populate_recordset()
(Микаэль Пакье, Том Лейн)Эти функции использовали тип результата, заданный в предложении
FROM ... AS
, не проверяя, соответствует ли он фактическому типу поступившего кортежа. В случае несоответствия обычно происходил сбой, хотя также вероятным было раскрытие содержимого памяти сервера. (CVE-2017-15098)Исправление скриптов запуска сервера — переключение на
$PGUSER
до открытия файла$PGLOG
(Ной Миш)Ранее файл журнала postmaster открывался ещё под именем root. Таким образом, владелец базы данных мог произвести атаку на другого пользователя системы, сделав
$PGLOG
символической ссылкой на некоторый другой файл, который в результате можно было испортить добавленными в него сообщениями журнала.По умолчанию эти скрипты никуда не устанавливаются. Если вы использовали их, замените свои экземпляры новыми копиями либо внесите те же коррективы в свои вручную изменённые скрипты. Если владельцем существующего файла
$PGLOG
является root, его нужно удалить или переименовать прежде чем перезапускать сервер с помощью исправленного скрипта. (CVE-2017-12172)Исправление вычисления сводных данных индекса BRIN для корректной работы при одновременном расширении таблицы (Альваро Эррера)
Ранее в условиях гонки некоторые строки таблицы могли пропадать из индекса. Для устранения последствий предыдущих проявлений этой проблемы может потребоваться перестроить существующие индексы BRIN.
Предупреждение возможных сбоев при параллельных изменениях индекса BRIN (Том Лейн)
В определённых условиях гонки могли возникать ошибки «invalid index offnum» (неверный номер смещения в индексе) или «inconsistent range map» (несогласованность в карте диапазонов).
Предотвращение в ходе логической репликации присваивания NULL нереплицируемым столбцам при репликации
UPDATE
(Петр Желинек)Исправление механизма логической репликации, чтобы триггеры
BEFORE ROW DELETE
вызывались в должное время (Масахико Савада)Ранее этого не происходило, если в таблице также имелся триггер
BEFORE ROW UPDATE
.Устранение сбоя при вызове логического декодирования из функции, использующей SPI, в частности, из любой функции на одном из языков PL (Том Лейн)
Игнорирование CTE (общих табличных выражений) при обращении к целевой таблице для выполнения
INSERT
/UPDATE
/DELETE
и недопущение сопоставления имён целевых таблиц, заданных с указанием схемы, с именами переходных таблиц в триггерах (Томас Манро)В результате для CTE, связанных с командами DML, восстановлено поведение, имевшее место до версии 10.
Уход от вычисления выражений в аргументах агрегатной функции для строк, не удовлетворяющих условию
FILTER
(Том Лейн)Тем самым восстанавливается поведение, наблюдавшееся до 10 версии (и описанное в стандарте SQL).
Исправление некорректных результатов запросов, содержащих в нескольких столбцах
GROUPING SETS
одну и ту же простую переменную (Том Лейн)Устранение утечки памяти на время выполнения запроса при вычислении функции, возвращающей множество, в целевом списке
SELECT
(Том Лейн)Реализована возможность параллельного выполнения подготовленных операторов с общими планами (Амит Капила, Кунтал Гхош)
Корректировка неправильных решений по распараллеливанию для вложенных запросов (Амит Капила, Кунтал Гхош)
Устранение сбоев в обработке параллельных запросов, возможных при удалении недавно использованной роли (Амит Капила)
Устранение сбоя при параллельном сканировании битовой карты с узлом плана BitmapAnd, расположенным под узлом BitmapOr (Дилип Кумар)
Исправление в функциях
json_build_array()
,json_build_object()
и их аналогах дляjsonb
обработки явно заданных аргументовVARIADIC
(Микаэль Пакье)Исправление логики «частей работы» автоочистки для предупреждения возможных сбоев и незаметной потери частей (Альваро Эррера)
Устранение сбоев в особых случаях при добавлении столбцов в конец представления (Том Лейн)
Фиксирование правильных зависимостей когда представление или правило содержит узлы выражения
FieldSelect
илиFieldStore
(Том Лейн)В отсутствие этих зависимостей команда
DROP
со столбцом или типом данных может выполниться, когда не должна, что вызовет ошибки при последующем использовании представления или правила. Данное исправление не защищает существующие представления/правила, а повлияет только на создаваемые в будущем.Правильное определение хешируемости диапазонных типов данных (Том Лейн)
Планировщик ошибочно полагал, что любой диапазонный тип может хешироваться для использования в соединениях или агрегировании по хешу, но на самом деле он должен проверять, поддерживает ли хеширование подтип диапазона. Это не касается встроенных диапазонных типов, так как все они всё равно хешируемые.
Игнорирование узлов выражений
RelabelType
должным образом при рассмотрении статистики по функциональным зависимостям (Дэвид Роули)Это позволяет, например, правильно использовать расширенную статистику по столбцам
varchar
.Предотвращение разделения информации переходного состояния между сортирующими агрегатными функциями (Дэвид Роули)
Вследствие этого разделения возникали сбои во встроенных сортирующих агрегатах и могли также возникать в подобных пользовательских функциях. Начиная с версии 11, предусмотрены средства для надёжной защиты от таких случаев, а в ветвях стабильных выпусков просто отключена оптимизация.
Недопущение игнорирования значения
idle_in_transaction_session_timeout
, если до этого произошёл тайм-аут оператора (statement_timeout
) (Лукас Фиттл)Устранение маловероятной потери сообщений
NOTIFY
вследствие зацикливания идентификаторов транзакций (Марко Тииккая, Том Лейн)Если в сеансе не выполнялись никакие запросы, то есть он просто ждал уведомлений и за это время прошло более 2 миллиардов транзакций, он начинал пропускать уведомления от параллельно фиксируемых транзакций.
Уменьшение частоты запросов на сброс данных в процессе копирования файлов во избежание проблем с производительностью в macOS, в частности с новой файловой системой APFS (Том Лейн)
Реализована возможность использовать режим
FREEZE
командыCOPY
на уровне изоляции транзакцийREPEATABLE READ
или выше (Ной Миш)Этот сценарий использования был непреднамеренно потерян вследствие предыдущего исправления ошибки.
Исправление функции
AggGetAggref()
, чтобы возвращались корректные узлыAggref
для функций завершения агрегатов с объединёнными промежуточными вычислениями (Том Лейн)Исправление нечётких указаний схемы в некоторых новых запросах в pg_dump и psql (Виталий Буровой, Том Лейн, Ной Миш)
Уход от использования оператора
@>
в запросах psql для команды\d
(Том Лейн)Это предотвращает проблемы, возникающие при установке расширения parray_gin, так как в нём определён конфликтующий оператор.
Исправление в pg_basebackup сравнения путей табличных пространств посредством приведения путей к канонической форме (Микаэль Пакье)
Это особенно полезно в Windows.
Исправление libpq, чтобы для её работы не требовалось существование домашнего каталога пользователя (Том Лейн)
В версии 10 невозможность найти домашний каталог при попытке прочитать
~/.pgpass
считалась критической ошибкой, но эта ситуация должна обрабатываться так же, как и отсутствие данного файла. И в версии 10, и в ветвях предыдущих выпусков была допущена та же ошибка при чтении~/.pg_service.conf
, хотя это было менее очевидно, так как данный файл использовался только при указании имени службы.В ecpglib исправлена обработка обратной косой черты в строковых константах в зависимости от значения
standard_conforming_strings
(Такаюки Цунакава)Игнорирование в ecpglib дробной части при вводе целочисленных значений в режиме совместимости с Informix (Гао Цзэнци, Михаэль Мескес)
Добавление отсутствующего предварительного требования temp-install для целей типа
check
в Make (Ной Миш)Некоторые невыполняемые по умолчанию тестовые процедуры, подобные
make check
, не проверяли актуальность временной инсталляции.Обновление данных часовых поясов до версии tzdata 2017c, включающее изменения правил перехода на летнее время на Фиджи, в Намибии, Серверном Кипре, Судане, Тонга и на островах Теркс и Кайкос, плюс корректировку исторических данных для Аляски, Апии, Бирмы, Калькутты, Детройта, Ирландии, Намибии и Паго-Паго.
В документации для HTML-якорей восстановлен верхний регистр (Питер Эйзентраут)
Вследствие изменений инструментария в документации 10.0 для внутренних HTML-якорей был изменён регистр строк, что привело к повреждению некоторых внешних ссылок на документацию на нашем сайте. Поэтому было решено вернуться к предыдущему стилю со строками в верхнем регистре.