E.16. Выпуск 9.5.10
Дата выпуска: 2017-11-09
В этот выпуск вошли различные исправления, внесённые после версии 9.5.9. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.16.1. Миграция на версию 9.5.10
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если вы используете индексы BRIN, прочитайте четвёртую запись в списке изменений.
Также, если вы обновляете сервер с более ранней версии, чем 9.5.8, см. Раздел E.18.
E.16.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, включающее изменения правил перехода на летнее время на Фиджи, в Намибии, Серверном Кипре, Судане, Тонга и на островах Теркс и Кайкос, плюс корректировку исторических данных для Аляски, Апии, Бирмы, Калькутты, Детройта, Ирландии, Намибии и Паго-Паго.