E.20. Выпуск 9.5.6
Дата выпуска: 2017-02-09
В этот выпуск вошли различные исправления, внесённые после версии 9.5.5. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.20.1. Миграция на версию 9.5.6
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если в вашей инсталляции проявилась ошибка, описанная в первой записи следующего списка изменений, после обновления вам может потребоваться предпринять дополнительные действия для исправления испорченных индексов.
Также, если вы обновляете сервер с более ранней версии, чем 9.5.5, см. Раздел E.21.
E.20.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), в Тонга и в Антарктике/Кейси, плюс корректировку исторических данных для Италии, Казахстана, Мальты и Палестины. Переход к предпочитаемому числовому обозначению пояса для Тонга.