E.49. Выпуск 10.1

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

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

E.49.1. Миграция на версию 10.1

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

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

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

E.49. Release 10.1

Release date: 2017-11-09

This release contains a variety of fixes from 10.0. For information about new features in major release 10, see Section E.50.

E.49.1. Migration to Version 10.1

A dump/restore is not required for those running 10.X.

However, if you use BRIN indexes, see the fourth changelog entry below.

E.49.2. Changes

  • Ensure that INSERT ... ON CONFLICT DO UPDATE checks table permissions and RLS policies in all cases (Dean Rasheed)

    The update path of INSERT ... ON CONFLICT DO UPDATE requires SELECT permission on the columns of the arbiter index, but it failed to check for that in the case of an arbiter specified by constraint name. In addition, for a table with row level security enabled, it failed to check updated rows against the table's SELECT policies (regardless of how the arbiter index was specified). (CVE-2017-15099)

  • Fix crash due to rowtype mismatch in json{b}_populate_recordset() (Michael Paquier, Tom Lane)

    These functions used the result rowtype specified in the FROM ... AS clause without checking that it matched the actual rowtype of the supplied tuple value. If it didn't, that would usually result in a crash, though disclosure of server memory contents seems possible as well. (CVE-2017-15098)

  • Fix sample server-start scripts to become $PGUSER before opening $PGLOG (Noah Misch)

    Previously, the postmaster log file was opened while still running as root. The database owner could therefore mount an attack against another system user by making $PGLOG be a symbolic link to some other file, which would then become corrupted by appending log messages.

    By default, these scripts are not installed anywhere. Users who have made use of them will need to manually recopy them, or apply the same changes to their modified versions. If the existing $PGLOG file is root-owned, it will need to be removed or renamed out of the way before restarting the server with the corrected script. (CVE-2017-12172)

  • Fix BRIN index summarization to handle concurrent table extension correctly (Álvaro Herrera)

    Previously, a race condition allowed some table rows to be omitted from the index. It may be necessary to reindex existing BRIN indexes to recover from past occurrences of this problem.

  • Fix possible failures during concurrent updates of a BRIN index (Tom Lane)

    These race conditions could result in errors like invalid index offnum or inconsistent range map.

  • Prevent logical replication from setting non-replicated columns to nulls when replicating an UPDATE (Petr Jelinek)

  • Fix logical replication to fire BEFORE ROW DELETE triggers when expected (Masahiko Sawada)

    Previously, that failed to happen unless the table also had a BEFORE ROW UPDATE trigger.

  • Fix crash when logical decoding is invoked from a SPI-using function, in particular any function written in a PL language (Tom Lane)

  • Ignore CTEs when looking up the target table for INSERT/UPDATE/DELETE, and prevent matching schema-qualified target table names to trigger transition table names (Thomas Munro)

    This restores the pre-v10 behavior for CTEs attached to DML commands.

  • Avoid evaluating an aggregate function's argument expression(s) at rows where its FILTER test fails (Tom Lane)

    This restores the pre-v10 (and SQL-standard) behavior.

  • Fix incorrect query results when multiple GROUPING SETS columns contain the same simple variable (Tom Lane)

  • Fix query-lifespan memory leakage while evaluating a set-returning function in a SELECT's target list (Tom Lane)

  • Allow parallel execution of prepared statements with generic plans (Amit Kapila, Kuntal Ghosh)

  • Fix incorrect parallelization decisions for nested queries (Amit Kapila, Kuntal Ghosh)

  • Fix parallel query handling to not fail when a recently-used role is dropped (Amit Kapila)

  • Fix crash in parallel execution of a bitmap scan having a BitmapAnd plan node below a BitmapOr node (Dilip Kumar)

  • Fix json_build_array(), json_build_object(), and their jsonb equivalents to handle explicit VARIADIC arguments correctly (Michael Paquier)

  • Fix autovacuum's work item logic to prevent possible crashes and silent loss of work items (Álvaro Herrera)

  • Fix corner-case crashes when columns have been added to the end of a view (Tom Lane)

  • Record proper dependencies when a view or rule contains FieldSelect or FieldStore expression nodes (Tom Lane)

    Lack of these dependencies could allow a column or data type DROP to go through when it ought to fail, thereby causing later uses of the view or rule to get errors. This patch does not do anything to protect existing views/rules, only ones created in the future.

  • Correctly detect hashability of range data types (Tom Lane)

    The planner mistakenly assumed that any range type could be hashed for use in hash joins or hash aggregation, but actually it must check whether the range's subtype has hash support. This does not affect any of the built-in range types, since they're all hashable anyway.

  • Correctly ignore RelabelType expression nodes when examining functional-dependency statistics (David Rowley)

    This allows, e.g., extended statistics on varchar columns to be used properly.

  • Prevent sharing transition states between ordered-set aggregates (David Rowley)

    This causes a crash with the built-in ordered-set aggregates, and probably with user-written ones as well. v11 and later will include provisions for dealing with such cases safely, but in released branches, just disable the optimization.

  • Prevent idle_in_transaction_session_timeout from being ignored when a statement_timeout occurred earlier (Lukas Fittl)

  • Fix low-probability loss of NOTIFY messages due to XID wraparound (Marko Tiikkaja, Tom Lane)

    If a session executed no queries, but merely listened for notifications, for more than 2 billion transactions, it started to miss some notifications from concurrently-committing transactions.

  • Reduce the frequency of data flush requests during bulk file copies to avoid performance problems on macOS, particularly with its new APFS file system (Tom Lane)

  • Allow COPY's FREEZE option to work when the transaction isolation level is REPEATABLE READ or higher (Noah Misch)

    This case was unintentionally broken by a previous bug fix.

  • Fix AggGetAggref() to return the correct Aggref nodes to aggregate final functions whose transition calculations have been merged (Tom Lane)

  • Fix insufficient schema-qualification in some new queries in pg_dump and psql (Vitaly Burovoy, Tom Lane, Noah Misch)

  • Avoid use of @> operator in psql's queries for \d (Tom Lane)

    This prevents problems when the parray_gin extension is installed, since that defines a conflicting operator.

  • Fix pg_basebackup's matching of tablespace paths to canonicalize both paths before comparing (Michael Paquier)

    This is particularly helpful on Windows.

  • Fix libpq to not require user's home directory to exist (Tom Lane)

    In v10, failure to find the home directory while trying to read ~/.pgpass was treated as a hard error, but it should just cause that file to not be found. Both v10 and previous release branches made the same mistake when reading ~/.pg_service.conf, though this was less obvious since that file is not sought unless a service name is specified.

  • In ecpglib, correctly handle backslashes in string literals depending on whether standard_conforming_strings is set (Tsunakawa Takayuki)

  • Make ecpglib's Informix-compatibility mode ignore fractional digits in integer input strings, as expected (Gao Zengqi, Michael Meskes)

  • Fix missing temp-install prerequisites for check-like Make targets (Noah Misch)

    Some non-default test procedures that are meant to work like make check failed to ensure that the temporary installation was up to date.

  • Update time zone data files to tzdata release 2017c for DST law changes in Fiji, Namibia, Northern Cyprus, Sudan, Tonga, and Turks & Caicos Islands, plus historical corrections for Alaska, Apia, Burma, Calcutta, Detroit, Ireland, Namibia, and Pago Pago.

  • In the documentation, restore HTML anchors to being upper-case strings (Peter Eisentraut)

    Due to a toolchain change, the 10.0 user manual had lower-case strings for intrapage anchors, thus breaking some external links into our website documentation. Return to our previous convention of using upper-case strings.

FAQ