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-якорей был изменён регистр строк, что привело к повреждению некоторых внешних ссылок на документацию на нашем сайте. Поэтому было решено вернуться к предыдущему стилю со строками в верхнем регистре.