E.35. Выпуск 9.5.10

Дата выпуска: 2017-11-09

В этот выпуск вошли различные исправления, внесённые после версии 9.5.9. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.45.

E.35.1. Миграция на версию 9.5.10

Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.

Однако если вы используете индексы BRIN, прочитайте четвёртую запись в списке изменений.

Также, если вы обновляете сервер с более ранней версии, чем 9.5.8, см. Раздел E.37.

E.35.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» (несогласованность в карте диапазонов).

  • Устранение сбоя при вызове логического декодирования из функции, использующей SPI, в частности, из любой функции на одном из языков PL (Том Лейн)

  • Исправление в функциях json_build_array(), json_build_object() и их аналогах для jsonb обработки явно заданных аргументов VARIADIC (Микаэль Пакье)

  • Корректное недопущение попыток приведения бесконечных значений с плавающей точкой к типу numeric (Том Лейн, КайГай Кохэй)

    Ранее поведение зависело от платформы.

  • Устранение сбоев в особых случаях при добавлении столбцов в конец представления (Том Лейн)

  • Фиксирование правильных зависимостей когда представление или правило содержит узлы выражения FieldSelect или FieldStore (Том Лейн)

    В отсутствие этих зависимостей команда DROP со столбцом или типом данных может выполниться, когда не должна, что вызовет ошибки при последующем использовании представления или правила. Данное исправление не защищает существующие представления/правила, а повлияет только на создаваемые в будущем.

  • Правильное определение хешируемости диапазонных типов данных (Том Лейн)

    Планировщик ошибочно полагал, что любой диапазонный тип может хешироваться для использования в соединениях или агрегировании по хешу, но на самом деле он должен проверять, поддерживает ли хеширование подтип диапазона. Это не касается встроенных диапазонных типов, так как все они всё равно хешируемые.

  • Игнорирование узлов выражений RelabelType при определении уникальности содержимого отношения (Дэвид Роули)

    Это позволяет применить оптимизацию, когда результирующий столбец имеет тип varchar.

  • Устранение маловероятной потери сообщений NOTIFY вследствие зацикливания идентификаторов транзакций (Марко Тииккая, Том Лейн)

    Если в сеансе не выполнялись никакие запросы, то есть он просто ждал уведомлений и за это время прошло более 2 миллиардов транзакций, он начинал пропускать уведомления от параллельно фиксируемых транзакций.

  • Предупреждение сбоя SIGBUS в Linux, когда в памяти DSM запрашивается область объёма, превышающего свободный объём в tmpfs (Томас Мунро)

  • Предотвращение маловероятного сбоя при рекурсивном срабатывании триггеров (Том Лейн)

  • Реализована возможность использовать режим FREEZE команды COPY на уровне изоляции транзакций REPEATABLE READ или выше (Ной Миш)

    Этот сценарий использования был непреднамеренно потерян вследствие предыдущего исправления ошибки.

  • Корректное восстановление значения umask при ошибке создания файла в COPY или lo_export() (Питер Эйзентраут)

  • Улучшение сообщения об ошибке в случае дублирующихся имён столбцов в ANALYZE (Натан Боссарт)

  • Исправление разбора последней строки в файле pg_hba.conf, завершающемся не символом перевода строки (Том Лейн)

  • Исправление в pg_basebackup сравнения путей табличных пространств посредством приведения путей к канонической форме (Микаэль Пакье)

    Это особенно полезно в Windows.

  • Исправление libpq, чтобы для её работы не требовалось существование домашнего каталога пользователя (Том Лейн)

    В версии 10 невозможность найти домашний каталог при попытке прочитать ~/.pgpass считалась критической ошибкой, но эта ситуация должна обрабатываться так же, как и отсутствие данного файла. И в версии 10, и в ветвях предыдущих выпусков была допущена та же ошибка при чтении ~/.pg_service.conf, хотя это было менее очевидно, так как данный файл использовался только при указании имени службы.

  • Исправление в libpq защиты от целочисленного переполнения в счётчике строк в PGresult (Микаэль Пакье)

  • Исправление в ecpg обработки объявлений курсора вне текущей области с переменными типа указатель или массив (Михаэль Мескес)

  • В ecpglib исправлена обработка обратной косой черты в строковых константах в зависимости от значения standard_conforming_strings (Такаюки Цунакава)

  • Игнорирование в ecpglib дробной части при вводе целочисленных значений в режиме совместимости с Informix (Гао Цзэнци, Михаэль Мескес)

  • Добавление отсутствующего предварительного требования temp-install для целей типа check в Make (Ной Миш)

    Некоторые невыполняемые по умолчанию тестовые процедуры, подобные make check, не проверяли актуальность временной инсталляции.

  • Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией tzcode2017c (Том Лейн)

    Тем самым исправлены различные дефекты; единственное, что могут заметить пользователи — правила перевода на летнее время для часового пояса с именем в стиле POSIX в отсутствие файла posixrules в каталоге данных часового пояса теперь соответствуют текущему закону США, а не действовавшему десять лет назад.

  • Обновление данных часовых поясов до версии tzdata 2017c, включающее изменения правил перехода на летнее время на Фиджи, в Намибии, Серверном Кипре, Судане, Тонга и на островах Теркс и Кайкос, плюс корректировку исторических данных для Аляски, Апии, Бирмы, Калькутты, Детройта, Ирландии, Намибии и Паго-Паго.