E.24. Выпуск 9.6.1

Дата выпуска: 2016-10-27

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

E.24.1. Миграция на версию 9.6.1

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

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

E.24.2. Изменения

  • Корректировка записи в WAL отметки об очистке карт свободного пространства и видимости (Паван Деоласи, Хейкки Линнакангас)

    Ранее могло получаться так, что эти файлы не восстанавливались корректно при восстановлении после сбоя или оказывались неправильными на резервном сервере. Обращение к недействительному содержимому карты свободного пространства могло повлечь попытки использовать страницы, которые были стёрты из самого отношения, что обычно приводило к ошибкам типа «не удалось прочитать блок XXX: прочитано только 0 из 8192 байт». Также были возможны нарушения контрольных сумм в карте видимости, при включённом механизме контрольных сумм.

    Процедуры для определения наличия проблемы и её исправления рассматриваются в https://wiki.postgresql.org/wiki/Free_Space_Map_Problems.

  • Предупреждение возможного повреждения данных в процессе преобразования программой pg_upgrade карты видимости отношения в формат 9.6 (Том Лейн)

    На машинах с порядком байт от старшего, байты новой карты видимости записывались в неправильном порядке, в результате чего карта оказывалась абсолютно некорректной. В Windows старая карта считывалась в текстовом режиме, что приводило к некорректным результатам, если в карте рядом оказывались байты, представляющие последовательность символов возврат каретки/перевод строки. Последняя ошибка практически всегда должна была приводить к сбою pg_upgrade из-за того, что длина файла с картой оказывалась неверной.

    Если вы используете компьютер с порядок байт от старшего (таковы многие архитектуры не Intel) и применяли pg_upgrade для обновления баз с версии до 9.6, вы должны принять, что все карты видимости некорректны и должны быть перестроены. Для этого достаточно аннулировать карты видимости всех отношений с помощью функции pg_truncate_visibility_map() расширения contrib/pg_visibility. Более подробную информацию вы можете найти в https://wiki.postgresql.org/wiki/Visibility_Map_Problems.

  • Предотвращение ошибок сериализации при операции добавлении данных, конфликтующей с собой же, в INSERT ... ON CONFLICT (Томас Манро, Питер Гейган)

  • Ликвидация риска использования после освобождения при выполнении агрегатных функций с DISTINCT (Питер Гейган)

    Это могло приводить к отказам или некорректным результатам запросов.

  • Исправление обработки полиморфных агрегатных функций, используемых в качестве оконных (Том Лейн)

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

  • Исправление COPY со списком имён столбцов из таблицы, в которой включена защита на уровне строк (Адам Брайтвелл)

  • Исправление EXPLAIN, чтобы она выдавала корректный XML, когда параметр track_io_timing включён (Маркус Винанд)

    Ранее вывод в формате XML содержал синтаксически некорректные теги, как например <I/O-Read-Time>. Сейчас выдаётся такой тег: <I-O-Read-Time>.

  • Исправление обновления статистики при TRUNCATE в подготовленной транзакции (Стас Кельвич)

  • Исправление ошибок при объединении наследуемых ограничений CHECK в процессе создания или изменения структуры таблицы (Том Лейн, Амит Ланготе)

    Теперь одинаковые ограничения CHECK могут добавляться в родительскую и дочернюю таблицу в любом порядке. С другой стороны, слияние проверенного ограничения из родительской таблицы с непроверенным (NOT VALID) ограничением в дочерней не должно допускаться. Подобным образом, не должно допускаться слияние дочернего ненаследуемого (NO INHERIT) ограничения с наследуемым.

  • Вывод разумного значения в pg_settings.unit для параметров min_wal_size и max_wal_size (Том Лейн)

  • Исправление замены элементов массива в jsonb_set() (Том Лейн)

    Если целью замены был существующий элемент массива JSON, он удалялся, а не заменялся новым.

  • Предотвращение очень маловероятного повреждения данных в результате проверки видимости кортежа без удержания блокировки буфера (Томас Манро, Питер Гейган, Том Лейн)

  • Сохранение времени фиксирования транзакций после перезагрузки сервера (Жюльен Руо, Крейг Рингер)

    При включённом параметре track_commit_timestamp старые метки времени фиксации становились недоступными после полной перезагрузки сервера.

  • Исправление логического декодирования WAL в случаях, когда вывод WAL из подтранзакции оказывался слишком большим и вымещался на диск (Андрес Фройнд)

  • Ликвидация проблемы с недействительным указателем в механизме логического декодирования WAL (Стас Кельвич)

  • Округление размера запроса разделяемой памяти до числа, кратного размеру огромной страницы, когда огромные страницы используются в Linux (Том Лейн)

    Это позволяет избежать возможных сбоев в munmap() в системах с нетипичными размерами огромных страниц. За исключением случаев краха, эти сбои проявлялись только в сообщениях в журнале.

  • Не пытаться разделять контекст SSL между несколькими подключениями в libpq (Хейкки Линнакангас)

    Такое разделение приводило к разнообразным ошибкам, особенно при попытке использования различных параметров SSL для разных соединений.

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

    Поступило сообщение об утечке в процессе PQreset(), но были возможны проявления и в связанных случаях.

  • В pg_upgrade проверка загружаемости библиотек должна производиться по порядку имён (Том Лейн)

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

  • Исправление pg_upgrade для корректной работы с расширениями, содержащими методы доступа индексов (Том Лейн)

    Чтобы это было возможно, для сервера была добавлена поддержка команды ALTER EXTENSION ADD/DROP ACCESS METHOD. Эта функциональность должна была добавляться в изначальной доработке, реализующей динамическое создание методов доступа, но этого не произошло по упущению.

  • Улучшение вывода ошибок в pg_upgrade при копировании/создании ссылок/перезаписи (Том Лейн, Альваро Эррера)

  • Исправление pg_dump для поддержки серверов версий до 7.4 (Амит Ланготе, Том Лейн)

  • Недопущение одновременного указания аргументов --source-server и --source-target для pg_rewind (Михаэль Банк)

  • Программа pg_rewind должна отключать synchronous_commit в своём сеансе на исходном сервере (Михаэль Банк, Микаэль Пакье)

    При этом pg_rewind сможет работать, даже когда на исходном сервере настроена синхронная репликация, но она по какой-то причине не функционирует.

  • В pg_xlogdump нужно повторять попытку открыть новый сегмент WAL, когда используется параметр --follow (Магнус Хагандер)

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

  • Исправление в contrib/pg_visibility, чтобы выдавался корректный TID испорченного кортежа (ранее TID мог выдаваться некорректно вследствие изменения, впоследствии отменённого) (Том Лейн)

  • Исправление зависимостей в makefile, чтобы параллельная сборка PL/Python сама по себе выполнялась надёжно (Павел Райскуп)

  • Обновление данных часовых поясов до версии tzdata 2016h, включающее изменение правил перехода на летнее время в Палестине и Турции, а также исторические изменения для Турции и некоторых регионов России. Переход к числовым аббревиатурам для некоторых часовых поясов в Антарктике, бывшем Советском Союзе и на Шри-Ланке.

    Ранее в базе данных часовых поясов IANA предоставлялись текстовые аббревиатуры для всех часовых поясов и иногда при этом указывались аббревиатуры, которые практически не употреблялись местным населением. Сейчас происходит процесс ухода от этой практики в пользу использования числовых смещений UTC в тех часовых поясах, где нет никаких свидетельств реального использования английской аббревиатуры. Как минимум на данном этапе, PostgreSQL продолжит принимать подобные удалённые аббревиатуры при вводе дат/времени. Но они не будут видны при просмотре представления pg_timezone_names и не будут выводиться с датами/временем.

    Начиная с этого выпуска, аббревиатура AMT более не считается занятой часовым поясом Армении. Поэтому мы изменили значение этой аббревиатуры по умолчанию, чтобы она обозначала Амазонское время (Amazon Time), так что теперь она означает UTC-4, а не UTC+4.