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.