E.31. Выпуск 10.1
Дата выпуска: 2017-11-09
В этот выпуск вошли различные исправления, внесённые после версии 10.0. За информацией о нововведениях 10 версии обратитесь к Разделу E.32.
E.31.1. Миграция на версию 10.1
Если используется версия 10.X, выгрузка/восстановление базы не требуется.
Однако если вы используете индексы BRIN, прочитайте четвёртую запись в списке изменений.
E.31.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-якорей был изменён регистр строк, что привело к повреждению некоторых внешних ссылок на документацию на нашем сайте. Поэтому было решено вернуться к предыдущему стилю со строками в верхнем регистре. 
