E.39. Выпуск 9.5.6

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

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

E.39.1. Миграция на версию 9.5.6

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

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

Также, если вы обновляете сервер с более ранней версии, чем 9.5.5, см. Раздел E.40.

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

  • Исправление поведения в особых условиях, которое приводило к повреждению индексов, создаваемых командой CREATE INDEX CONCURRENTLY (Паван Деоласи, Том Лейн)

    Если команда CREATE INDEX CONCURRENTLY применялась для построения индекса, зависящего от столбца, ранее не индексированного, то у строк, изменяемых транзакциями, выполняемыми одновременно с командой CREATE INDEX, могли оказываться некорректные записи в индексе. В случае подозрений, что вас это коснулось, самое надёжное решение — перестроить такие индексы после установки этого обновления.

  • Предотвращение утери специального снимка, используемого при сканированиях каталога, при преждевременной очистке данных (Tom Lane)

    Рабочие процессы не учитывали этот снимок, сообщая о своём самом старом xmin, что оставляло возможность для удаления по-прежнему нужных данных параллельными операциями очистки. Это приводило к появлению плавающих ошибок с сообщениями «ошибка поиска в кеше для отношения 1255».

  • Исправление некорректной записи в WAL, формируемой для индексов BRIN (Кунтал Гхош)

    Запись WAL, выдаваемая для страницы BRIN «revmap» при перемещении кортежа индекса в другую страницу, была некорректной. При воспроизведении журнала соответствующая часть индекса становилась непригодной, и её требовалось вычислять заново.

  • Безусловное фиксирование в WAL создания «слоя инициализации» для нежурналируемых таблиц (Микаэль Пакье)

    Ранее это действие пропускалось при wal_level = minimal, но на самом деле это необходимо даже в этом случае, чтобы нежурналируемая таблица корректно создавалась пустой после сбоя.

  • Сокращение взаимоблокировок на резервных серверах при воспроизведении операций очистки индекса-B-дерева (Саймон Риггс)

    Это изменение исключает существенные задержки при репликации, которые иногда имели место при воспроизведении таких операций.

  • Если процесс сборщика статистики потерян, перезапускать его и в режиме горячего резерва (Такаюки Цунакава)

  • Обеспечение корректной работы механизма уведомлений горячего резерва, когда он включается при запуске резервного сервера (Антс Аасма, Крейг Рингер)

  • Проверка прерываний в момент ожидания конфликтующего запроса сервером горячего резерва (Саймон Риггс)

  • Предупреждение постоянного перезапуска процесса запуска автоочистки в особых случаях (Амит Хандекар)

    Это исправление решает проблему, возникавшую, когда автоочистка номинально отключена и есть несколько таблиц, требующих «заморозки», но эти таблицы уже обработаны рабочими процессами автоочистки.

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

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

  • Команда ALTER TABLE должна сохранять назначения табличных пространств индексам при перестраивании индексов (Том Лейн, Микаэль Пакье)

    Ранее с нестандартными значениями default_tablespace были возможны разрушения индексов.

  • Исправление некорректного изменения свойств триггерной функции при изменении свойства «откладываемости» ограничения внешнего ключа с помощью команды ALTER TABLE ... ALTER CONSTRAINT (Том Лейн)

    Это приводило к странным сбоям при последующем обращении к внешнему ключу, так как триггеры срабатывали не в положенное время.

  • Недопущение удаления ограничения внешнего ключа при наличии событий, ожидающих обработки триггерами, для целевого отношения (Том Лейн)

    Это предотвращает ошибки «не удалось найти триггер NNN» и «в отношении NNN нет триггеров».

  • Исправление поведения ALTER TABLE ... SET DATA TYPE ... USING в случаях, когда порядок столбцов в дочерней таблице отличается от родительской (Альваро Эррера)

    Вследствие того, что столбцы в выражении USING не перенумеровывались, возникала ошибка, обычно такая: «атрибут N имеет неправильный тип».

  • Исправление обращения к столбцу OID в случаях, когда таблица с таким столбцом связывается с родительской, тоже с OID, посредством ALTER TABLE ... INHERIT (Амит Ланготе)

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

  • Исправление поведения CREATE OR REPLACE VIEW — запрос представления должен изменяться до применения новых параметров представления (Дин Рашид)

    Ранее в команде происходил сбой, если новые параметры оказывались несогласованными со старым определением представления.

  • Получение правильного идентификатора объекта в ALTER TEXT SEARCH CONFIGURATION (Артур Закиров)

    Ранее расширениям, таким как модули логического декодирования, выдавался неправильный OID каталога.

  • Предупреждение сбоев механизма учёта времени транзакций при запросе особых XID (FrozenTransactionId и BootstrapTransactionId) (Крейг Рингер)

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

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

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

    Симптомами ошибки были неуместные сообщения «ON CONFLICT не поддерживается для таблицы ..., служащей таблицей каталога» когда целевым отношением INSERT ... ON CONFLICT было представление с каскадной проверкой.

  • Исправление некорректного сообщения «допустимое число элементов в целевом списке ограничено N» при использовании ON CONFLICT с широкими таблицами (Том Лейн)

  • Предотвращение разворачивания foo.* в набор столбцов в исходном выражении UPDATE (Том Лейн)

    Это приводило к ошибкам с сообщением «несоответствие целевого количества в UPDATE --- внутренняя ошибка». Теперь эта запись воспринимается как обозначение переменной «вся-строка», как и в других контекстах.

  • Обеспечение точного определения модификаторов типа столбцов в конструкциях VALUES с несколькими строками (Том Лейн)

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

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

    Обычно за начальным суррогатным символом Unicode должно следовать продолжение, но это не проверялось когда такой начальный символ оказывался последним в строке символов Unicode (U&'...') или в Unicode-идентификаторе (U&"...").

  • Определённо отрицательному поисковому запросу, например, !foo, должны удовлетворять пустые значения tsvector (Том Дунстан)

    Такие соответствия находились при поиске по индексу GIN, но не при последовательном сканировании или поиске по индексу GiST.

  • Предотвращение сбоя в ситуации, когда ts_rewrite() заменяет поддерево не верхнего уровня пустым запросом (Артур Закиров)

  • Устранение проблем с производительностью в ts_rewrite() (Том Лейн)

  • Исправление обработки в ts_rewrite() вложенных операторов NOT (Том Лейн)

  • Увеличение скорости пользовательских агрегатов, использующих в качестве перехода функцию array_append() (Том Лейн)

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

  • Предупреждение возможных сбоев в функциях array_position() и array_positions() при обработке массивов записей (Джун-сок Янг)

  • Устранение выхода на один байт за границу буфера в функции quote_literal_cstr() (Хейкки Линнакангас)

    Этот выход имел место только если входная строка содержала исключительно апострофы и/или обратные косые черты.

  • Предотвращение одновременного выполнения вызовов pg_start_backup() и pg_stop_backup() (Микаэль Пакье)

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

  • Отключение трансформации, которая пыталась оптимизировать бесполезные преобразования AT TIME ZONE (Том Лейн)

    Вследствие этого выдавались неверные результаты, когда упрощённое выражение использовалось в условии индекса.

  • Сохранение приведений interval-в-interval, которые на самом деле несут смысловую нагрузку (Том Лейн)

    В некоторых случаях приведения, которые должны были обнулять младшие поля значений interval, ошибочно считались бессмысленными и просто убирались. В результате, например, при приведении значения типа INTERVAL MONTH к INTERVAL YEAR поле месяцев не обнулялось.

  • Исправление ошибок при передаче значений параметров GUC параллельным исполнителям (Микаэль Пакье, Том Лейн)

  • Аннулирование кешированных планов при изменениях в параметрах сторонних таблиц (Амит Ланготе, Эцуро Фудзита, Ашутош Бапат)

  • Исправление pg_dump для корректной выгрузки пользовательских приведений и преобразований, использующих встроенные функции (Стивен Фрост)

  • Реализация более разумного поведения pg_restore с --create --if-exists в случаях, когда архив содержит нераспознанные команды DROP (Том Лейн)

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

  • Исправление ограничения нагрузки pg_basebackup при низкой скорости ввода/вывода (Антонин Хоуска)

    Если скорость диска на время оказывалась ниже заданного ограничения, в вычислении происходило переполнение, и в результате ограничение отключалось до конца операции.

  • Обеспечение корректной работы pg_basebackup с подкаталогами pg_stat_tmp и pg_replslot, являющимися символическими ссылками (Магнус Хагандер, Микаэль Пакье)

  • Предотвращение возможного сбоя pg_basebackup на резервном сервере при задействовании файлов WAL (Амит Капила, Роберт Хаас)

  • Исправление возможного дефекта при обработке развёрнутых массивов в ограничениях-проверках доменов и в конструкциях CASE (Том Лейн)

    Существовала вероятность, что функция PL/pgSQL, вызванная в этих контекстах, изменит или даже удалит значение массива, которое должно сохраняться для дополнительных операций.

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

  • Обеспечение правильного учёта объектов исключений Python, создаваемых нами для PL/Python, счётчиками использования (Рафа де ла Торре, Том Лейн)

    Это предотвращает ошибки, возникавшие при использовании объектов после цикла уборки мусора в Python.

  • Исправление в PL/Tcl поддержки триггеров для таблиц, в которых имеется столбец .tupno (Том Лейн)

    Это соответствует (ранее недокументированному) поведению команд PL/Tcl spi_exec и spi_execp, в том, что особый столбец .tupno добавляется, только если отсутствует настоящий с таким именем.

  • В файлах ~/.pgpass должны допускаться завершения строк в стиле DOS, даже на Unix-платформах (Вик Фиринг)

    Это изменение упрощает использование одних и тех же файлов паролей на машинах с Unix и Windows.

  • Устранение выхода на один байт за границу буфера, когда ecpg передаётся имя файла, которое заканчивается точкой (Такаюки Цунакава)

  • Исправление в psql дополнения табуляцией для команды ALTER DEFAULT PRIVILEGES (Жиль Даролд, Стивен Фрост)

  • В psql пустое или содержащее только пробелы значение переменной окружения PAGER должно означать «без постраничника» (Том Лейн)

    Ранее с таким значением вывод, предназначенный для постраничника, просто исчезал.

  • Улучшение в contrib/dblink передачи сообщений о низкоуровневых ошибках libpq, например, о нехватке памяти (Джо Конвей)

  • Реализация contrib/dblink должна игнорировать невоспринимаемые ей параметры сервера, когда в качестве источника параметров подключения используется сторонний сервер contrib/postgres_fdw (Кори Хинкер)

    Ранее, если объект стороннего сервера имел параметры, которые не относились к параметрам подключения libpq, происходила ошибка.

  • Исправление проблем с переносимостью в функциях contrib/pageinspect, связанных с индексами GIN (Питер Эйзентраут, Том Лейн)

  • В Windows изменённые переменные окружения должны передаваться и отладочным DLL (Кристина Ульрих)

  • Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией tzcode2016j (Том Лейн)

    Это решило ряд проблем; в частности, проблему при установке данных о часовых поясах в каталог, в котором не поддерживаются жёсткие ссылки.

  • Обновление данных часовых поясов до версии tzdata 2016j, включающее изменения правил перехода на летнее время на Северном Кипре (добавление нового пояса Asia/Famagusta), в России (добавление нового пояса Europe/Saratov), в Тонга и в Антарктике/Кейси, плюс корректировку исторических данных для Италии, Казахстана, Мальты и Палестины. Переход к предпочитаемому числовому обозначению пояса для Тонга.