E.19. Выпуск 9.6.6
Дата выпуска: 2017-11-09
В этот выпуск вошли различные исправления, внесённые после версии 9.6.5. За информацией о нововведениях версии 9.6 обратитесь к Разделу E.25.
E.19.1. Миграция на версию 9.6.6
Если используется версия 9.6.X, выгрузка/восстановление базы не требуется.
Однако если вы используете индексы BRIN, прочитайте четвёртую запись в списке изменений.
Также, если вы обновляете сервер с версии, более ранней, чем 9.6.4, см. Раздел E.21.
E.19.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 (Том Лейн)
Исправление некорректных результатов запросов, содержащих в нескольких столбцах
GROUPING SETS
одну и ту же простую переменную (Том Лейн)Корректировка неправильных решений по распараллеливанию для вложенных запросов (Амит Капила, Кунтал Гхош)
Устранение сбоев в обработке параллельных запросов, возможных при удалении недавно использованной роли (Амит Капила)
Исправление в функциях
json_build_array()
,json_build_object()
и их аналогах дляjsonb
обработки явно заданных аргументовVARIADIC
(Микаэль Пакье)Корректное недопущение попыток приведения бесконечных значений с плавающей точкой к типу
numeric
(Том Лейн, КайГай Кохэй)Ранее поведение зависело от платформы.
Устранение сбоев в особых случаях при добавлении столбцов в конец представления (Том Лейн)
Фиксирование правильных зависимостей когда представление или правило содержит узлы выражения
FieldSelect
илиFieldStore
(Том Лейн)В отсутствие этих зависимостей команда
DROP
со столбцом или типом данных может выполниться, когда не должна, что вызовет ошибки при последующем использовании представления или правила. Данное исправление не защищает существующие представления/правила, а повлияет только на создаваемые в будущем.Правильное определение хешируемости диапазонных типов данных (Том Лейн)
Планировщик ошибочно полагал, что любой диапазонный тип может хешироваться для использования в соединениях или агрегировании по хешу, но на самом деле он должен проверять, поддерживает ли хеширование подтип диапазона. Это не касается встроенных диапазонных типов, так как все они всё равно хешируемые.
Игнорирование узлов выражений
RelabelType
при определении уникальности содержимого отношения (Дэвид Роули)Это позволяет применить оптимизацию, когда результирующий столбец имеет тип
varchar
.Предотвращение разделения информации переходного состояния между сортирующими агрегатными функциями (Дэвид Роули)
Вследствие этого разделения возникали сбои во встроенных сортирующих агрегатах и могли также возникать в подобных пользовательских функциях. Начиная с версии 11, предусмотрены средства для надёжной защиты от таких случаев, а в ветвях стабильных выпусков просто отключена оптимизация.
Недопущение игнорирования значения
idle_in_transaction_session_timeout
, если до этого произошёл тайм-аут оператора (statement_timeout
) (Лукас Фиттл)Устранение маловероятной потери сообщений
NOTIFY
вследствие зацикливания идентификаторов транзакций (Марко Тииккая, Том Лейн)Если в сеансе не выполнялись никакие запросы, то есть он просто ждал уведомлений и за это время прошло более 2 миллиардов транзакций, он начинал пропускать уведомления от параллельно фиксируемых транзакций.
Предупреждение сбоя SIGBUS в Linux, когда в памяти DSM запрашивается область объёма, превышающего свободный объём в tmpfs (Томас Манро)
Уменьшение частоты запросов на сброс данных в процессе копирования файлов во избежание проблем с производительностью в macOS, в частности с новой файловой системой APFS (Том Лейн)
Предотвращение маловероятного сбоя при рекурсивном срабатывании триггеров (Том Лейн)
Реализована возможность использовать режим
FREEZE
командыCOPY
на уровне изоляции транзакцийREPEATABLE READ
или выше (Ной Миш)Этот сценарий использования был непреднамеренно потерян вследствие предыдущего исправления ошибки.
Корректное восстановление значения umask при ошибке создания файла в
COPY
илиlo_export()
(Питер Эйзентраут)Улучшение сообщения об ошибке в случае дублирующихся имён столбцов в
ANALYZE
(Натан Боссарт)Добавление пропущенных случаев в
GetCommandLogLevel()
для устранения ошибок при использовании определённых SQL-команд, когдаlog_statement
имеет значениеddl
(Микаэль Пакье)Исправление разбора последней строки в файле
pg_hba.conf
, завершающемся не символом перевода строки (Том Лейн)Исправление функции
AggGetAggref()
, чтобы возвращались корректные узлыAggref
для функций завершения агрегатов с объединёнными промежуточными вычислениями (Том Лейн)Исправление pg_dump, чтобы команды
GRANT
выдавались в корректном порядке (Стивен Фрост)Исправление в pg_basebackup сравнения путей табличных пространств посредством приведения путей к канонической форме (Микаэль Пакье)
Это особенно полезно в Windows.
Исправление libpq, чтобы для её работы не требовалось существование домашнего каталога пользователя (Том Лейн)
В версии 10 невозможность найти домашний каталог при попытке прочитать
~/.pgpass
считалась критической ошибкой, но эта ситуация должна обрабатываться так же, как и отсутствие данного файла. И в версии 10, и в ветвях предыдущих выпусков была допущена та же ошибка при чтении~/.pg_service.conf
, хотя это было менее очевидно, так как данный файл использовался только при указании имени службы.Исправление в libpq защиты от целочисленного переполнения в счётчике строк в
PGresult
(Микаэль Пакье)Исправление в ecpg обработки объявлений курсора вне текущей области с переменными типа указатель или массив (Михаэль Мескес)
В ecpglib исправлена обработка обратной косой черты в строковых константах в зависимости от значения
standard_conforming_strings
(Такаюки Цунакава)Игнорирование в ecpglib дробной части при вводе целочисленных значений в режиме совместимости с Informix (Гао Цзэнци, Михаэль Мескес)
Исправление регрессионных тестов ecpg для более стабильного выполнения в Windows (Кристиан Ульрих, Михаэль Мескес)
Добавление отсутствующего предварительного требования temp-install для целей типа
check
в Make (Ной Миш)Некоторые невыполняемые по умолчанию тестовые процедуры, подобные
make check
, не проверяли актуальность временной инсталляции.Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией tzcode2017c (Том Лейн)
Тем самым исправлены различные дефекты; единственное, что могут заметить пользователи — правила перевода на летнее время для часового пояса с именем в стиле POSIX в отсутствие файла
posixrules
в каталоге данных часового пояса теперь соответствуют текущему закону США, а не действовавшему десять лет назад.Обновление данных часовых поясов до версии tzdata 2017c, включающее изменения правил перехода на летнее время на Фиджи, в Намибии, Серверном Кипре, Судане, Тонга и на островах Теркс и Кайкос, плюс корректировку исторических данных для Аляски, Апии, Бирмы, Калькутты, Детройта, Ирландии, Намибии и Паго-Паго.