E.21. Выпуск 9.5.5
Дата выпуска: 2016-10-27
В этот выпуск вошли различные исправления, внесённые после версии 9.5.4. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.21.1. Миграция на версию 9.5.5
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если в вашей инсталляции проявилась ошибка, описанная в первой записи следующего списка изменений, после обновления вам может потребоваться предпринять дополнительные действия для исправления испорченных карт свободного места.
Также, если вы обновляете сервер с более ранней версии, чем 9.5.2, см. Раздел E.24.
E.21.2. Изменения
- Корректировка записи в WAL отметки об очистке карт свободного пространства и видимости (Паван Деоласи, Хейкки Линнакангас) - Ранее могло получаться так, что эти файлы не восстанавливались корректно при восстановлении после сбоя или оказывались неправильными на резервном сервере. Обращение к недействительному содержимому карты свободного пространства могло повлечь попытки использовать страницы, которые были стёрты из самого отношения, что обычно приводило к ошибкам типа «не удалось прочитать блок - XXX: прочитано только 0 из 8192 байт». Также были возможны нарушения контрольных сумм в карте видимости, при включённом механизме контрольных сумм.- Процедуры для определения наличия проблемы и её исправления рассматриваются в https://wiki.postgresql.org/wiki/Free_Space_Map_Problems. 
- Исправление некорректного создания в WAL записей, относящихся к индексам GIN, на машинах с порядком байт от старшего (Том Лейн) - Типичным симптомом данной проблемы были ошибки «unexpected GIN leaf action» (неожиданное действие на уровне листьев GIN) при воспроизведении WAL. 
- Исправление команды - SELECT FOR UPDATE/SHARE, чтобы кортежи, изменённые впоследствии прерванной транзакцией, блокировались корректно (Альваро Эррера)- Начиная с версии 9.5, команда - SELECTиногда могла вообще не выдавать такие кортежи. Подтверждений того, что это могло иметь место в предыдущих версиях, не было, но теоретически при одновременных изменениях это возможно.
- Исправление перепроверок EvalPlanQual в ситуациях со сканированием CTE (Том Лейн) - Перепроверка всегда воспринимала такие CTE, как не возвращающие строки, в результате чего обычно не удавалось изменить строки, которые были изменены недавно. 
- Исправлено удаление спекулятивно добавленных кортежей TOAST при выходе из - INSERT ... ON CONFLICT(Оскари Сааренмаа)- В условиях гонки, когда две транзакции пытаются вставить конфликтующие кортежи, в проигравшей транзакции происходила ошибка «попытка удаления невидимого кортежа», если при добавлении вставлялись поля TOAST. 
- Предотвращение ошибок сериализации при операции добавлении данных, конфликтующей с собой же, в - INSERT ... ON CONFLICT(Томас Манро, Питер Гейган)
- Исправление некорректного повторения предыдущих результатов агрегирования по хешу в подзапросе (Эндрю Гирт) - Проверка возможности повторного использования ранее вычисленной хеш-таблицы со значениями состояния агрегата не учитывала то, что в выражении агрегируемого аргумента могла фигурировать ссылка на внешний запрос. В этом случае изменение в значении этой ссылки должно было приводить к пересчёту хеш-таблицы, но этого не происходило. 
- Ликвидирована утечка памяти на протяжении запроса в массовой команде - UPDATEдля таблицы с индексом- PRIMARY KEYили- REPLICA IDENTITY(Том Лейн)
- Исправление - COPYсо списком имён столбцов из таблицы, в которой включена защита на уровне строк (Адам Брайтвелл)
- Исправление - EXPLAIN, чтобы она выдавала корректный XML, когда параметр track_io_timing включён (Маркус Винанд)- Ранее вывод в формате XML содержал синтаксически некорректные теги, как например - <I/O-Read-Time>. Сейчас выдаётся такой тег:- <I-O-Read-Time>.
- Подавление вывода нулей для неизмеренного времени в - EXPLAIN(Максим Милютин)- При определённом сочетании параметров команда - EXPLAINвыдавала нулевые значения для того времени, которое на самом деле даже не замеряется при этих параметрах. Мы придерживаемся политики не выдавать такие поля в выводе- EXPLAIN, так что нужно обеспечить согласованность во всех случаях.
- Исправление обновления статистики при - TRUNCATEв подготовленной транзакции (Стас Кельвич)
- Исправление длительности тайм-аута, установленного для ожидания командой - VACUUMисключительной блокировки, чтобы она могла опустошить таблицу (Саймон Риггс)- Длительность таймаута должна была составлять 50 миллисекунд, но на самом деле это было лишь 50 микросекунд, в результате чего команда - VACUUMоставляла попытку опустошить таблицу гораздо раньше, чем планировалось. Теперь устанавливается запланированное значение.
- Исправление ошибок при объединении наследуемых ограничений - CHECKв процессе создания или изменения структуры таблицы (Том Лейн, Амит Ланготе)- Теперь одинаковые ограничения - CHECKмогут добавляться в родительскую и дочернюю таблицу в любом порядке. С другой стороны, слияние проверенного ограничения из родительской таблицы с непроверенным (- NOT VALID) ограничением в дочерней не должно допускаться. Подобным образом, не должно допускаться слияние дочернего ненаследуемого (- NO INHERIT) ограничения с наследуемым.
- Вывод разумного значения в - pg_settings.- unitдля параметров- min_wal_sizeи- max_wal_size(Том Лейн)
- Ликвидация искусственных ограничений на значения, принимаемые функциями - numeric_in()и- numeric_recv()(Том Лейн)- Мы принимаем числовые значения, не превышающие предела хранения (больше - 1e100000), поэтому кажется довольно неразумным, что- numeric_in()не принимала в научной записи экспоненты больше 1000. Также нет смысла не принимать в- numeric_recv()более 1000 цифр во вводимом значении.
- Предотвращение очень маловероятного повреждения данных в результате проверки видимости кортежа без удержания блокировки буфера (Томас Манро, Питер Гейган, Том Лейн) 
- Сохранение времени фиксирования транзакций после перезагрузки сервера (Жюльен Руо, Крейг Рингер) - При включённом параметре track_commit_timestamp старые метки времени фиксации становились недоступными после полной перезагрузки сервера. 
- Исправление логического декодирования WAL в случаях, когда вывод WAL из подтранзакции оказывался слишком большим и вымещался на диск (Андрес Фройнд) 
- Исправление возможной ошибки сортировки при прекращении использования сокращённых ключей (Питер Гейган) - В худшем случае это могло приводить к повреждению индекса-B-дерева, что потребует перестроить его с помощью команды - REINDEX. Но, как нам представляется, такие ситуации очень редки.
- Ликвидация утечки дескриптора файла, имевшей место при опустошении временного отношения размером более 1 Гбайта (Андрес Фройнд) 
- Запрещение запуска самостоятельного обслуживающего процесса при включённом режиме - standby_mode(Микаэль Пакье)- Такой режим не будет ничем полезен, так как никакой процесс-приёмник WAL не сможет получать данные WAL; и это может привести к некорректному поведению кода, который не рассчитан на такую ситуацию. 
- Исправление инициализации состояния слота репликации при повторном использовании слота (Микаэль Пакье) - В результате того, что не все поля слота сбрасывались, команда - VACUUMмогла не удалять «мёртвые» кортежи.
- Округление размера запроса разделяемой памяти до числа, кратного размеру огромной страницы, когда огромные страницы используются в Linux (Том Лейн) - Это позволяет избежать возможных сбоев в - munmap()в системах с нетипичными размерами огромных страниц. За исключением случаев краха, эти сбои проявлялись только в сообщениях в журнале.
- Выбор более случайного значения для идентификатора управляющего сегмента динамической разделяемой памяти (Роберт Хаас, Том Лейн) - Ранее каждый раз выбиралось одно и то же значение, потому что оно получалось из - random(), но- srandom()к этому моменту ещё не вызывалась. Это относительно безвредно, однако планировалось другое поведение.
- В Windows нужно повторять попытку создания управляющего сегмента динамической разделяемой памяти после ошибки «нет доступа» (Кётаро Хоригути, Амит Капила) - Иногда Windows выдаёт ошибку - ERROR_ACCESS_DENIEDвместо- ERROR_ALREADY_EXISTS, когда такой сегмент уже существует. Получая такую ошибку, главный процесс не мог запуститься, считая, что столкнулся с неисправимой ошибкой.
- Исправление в PL/pgSQL поведения с параметрами и локальными переменными типов - int2vectorи- oidvector(Том Лейн)
- Не пытаться разделять контекст SSL между несколькими подключениями в libpq (Хейкки Линнакангас) - Такое разделение приводило к разнообразным ошибкам, особенно при попытке использования различных параметров SSL для разных соединений. 
- Предотвращение утечек памяти в особых случаях в libpq (Том Лейн) - Поступило сообщение об утечке в процессе - PQreset(), но были возможны проявления и в связанных случаях.
- Согласование поведения параметров - --helpи- --versionпрограммы ecpg со всеми остальными нашими программами (Харибабу Комми)
- Исправление расчёта средней задержки в pgbench (Фабьен Коэльо) - Этот расчёт был неверным при наличии в скрипте команд - \sleepили когда длительность теста ограничивалась числом транзакций, а не общим временем.
- В pg_upgrade проверка загружаемости библиотек должна производиться по порядку имён (Том Лейн) - Это обходное решение проблемы зависимостей между расширениями, образуемых связями модулей трансформации языков с базовыми модулями самих языков и типов данных. 
- Программа pg_dump никогда не должна выгружать функции-конструкторы диапазонов (Том Лейн) - В результате такой выгрузки программа pg_upgrade не могла справиться с расширениями, включающими диапазонные типы, пытаясь дважды создать их функции-конструкторы. 
- При запуске pg_dump с ключом - -Cдолжно подавляться предложение- TABLESPACEкоманды- CREATE DATABASE, если указан ключ- --no-tablespaces(Том Лейн)
- Исправление работы pg_receivexlog с ключом - --synchronousбез слотов (Габриэль Бартолини)
- Недопущение одновременного указания аргументов - --source-serverи- --source-targetдля pg_rewind (Михаэль Банк)
- Программа pg_rewind должна отключать - synchronous_commitв своём сеансе на исходном сервере (Михаэль Банк, Микаэль Пакье)- При этом pg_rewind сможет работать, даже когда на исходном сервере настроена синхронная репликация, но она по какой-то причине не функционирует. 
- В pg_xlogdump нужно повторять попытку открыть новый сегмент WAL, когда используется параметр - --follow(Магнус Хагандер)- Это позволяет справиться с возможной задержкой при создании сервером следующего сегмента. 
- Исправление программы pg_xlogdump, чтобы она корректно работала с файлом WAL, начинающимся с записи продолжения, располагающейся на нескольких страницах (Паван Деоласи) 
- Исправление - contrib/pg_buffercacheдля работы со значением- shared_buffers, превышающим 256 Гбайт (КайГай Кохэй)
- Исправление скрипта - contrib/intarray/bench/bench.pl, чтобы он выводил результаты команды- EXPLAIN, которую он выполняет при запуске с ключом- -e(Даниэль Густафссон)
- Поддержка OpenSSL 1.1.0 (Хейкки Линнакангас) 
- Внедрение инфраструктуры тестирования TAP, чтобы её можно было применять для тестирования расширений (Крейг Рингер) - Когда PostgreSQL конфигурируется с параметром - --enable-tap-tests, теперь команда «make install» будет устанавливать файлы поддержки Perl для тестирования TAP туда, где PGXS сможет найти их. Благодаря этому внешние расширения смогут использовать- $(prove_check)без дополнительных проверок.
- В сборках MSVC программа pg_recvlogical включена в клиентский набор (МауМау) 
- Корректировка сопоставления часовых поясов в Windows, чтобы сервер корректно распознавал имена часовых поясов, появившиеся в последних версиях Windows (Микаэль Пакье) 
- Предупреждение ошибок при использовании устаревших аббревиатур динамических часовых поясов (Том Лейн) - Если аббревиатуре динамического часового пояса не соответствует запись в данных часового пояса, считать её равнозначной имени часового пояса. Это предупреждает неожиданные ошибки, когда IANA удаляет аббревиатуры из своей базы данных часовых поясов, что произошло в выпуске tzdata 2016f и, вполне вероятно, повторится в будущем. Вследствие этого не только не распознавались отдельные аббревиатуры; при любом расхождении происходил сбой в представлении - pg_timezone_abbrevs.
- Обновление данных часовых поясов до версии tzdata 2016h, включающее изменение правил перехода на летнее время в Палестине и Турции, а также исторические изменения для Турции и некоторых регионов России. Переход к числовым аббревиатурам для некоторых часовых поясов в Антарктике, бывшем Советском Союзе и на Шри-Ланке. - Ранее в базе данных часовых поясов IANA предоставлялись текстовые аббревиатуры для всех часовых поясов и иногда при этом указывались аббревиатуры, которые практически не употреблялись местным населением. Сейчас происходит процесс ухода от этой практики в пользу использования числовых смещений UTC в тех часовых поясах, где нет никаких свидетельств реального использования английской аббревиатуры. Как минимум на данном этапе, PostgreSQL продолжит принимать подобные удалённые аббревиатуры при вводе дат/времени. Но они не будут видны при просмотре представления - pg_timezone_namesи не будут выводиться с датами/временем.- Начиная с этого выпуска, аббревиатура - AMTболее не считается занятой часовым поясом Армении. Поэтому мы изменили значение этой аббревиатуры по умолчанию, чтобы она обозначала Амазонское время (Amazon Time), так что теперь она означает UTC-4, а не UTC+4.