E.13. Выпуск 9.5.13
Дата выпуска: 2018-05-10
В этот выпуск вошли различные исправления, внесённые после версии 9.5.12. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.13.1. Миграция на версию 9.5.13
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если вас касаются ошибки с пометкой функций, описанные в первой записи в списке изменений, потребуются дополнительные действия для исправления каталогов баз данных.
Если вы обновляете сервер с более ранней версии, чем 9.5.12, см. также Раздел E.14.
E.13.2. Изменения
- Исправление некорректных пометок изменчивости для нескольких встроенных функций (Томас Манро, Том Лейн) - Функции - query_to_xml,- cursor_to_xml,- cursor_to_xmlschema,- query_to_xmlschemaи- query_to_xml_and_xmlschemaдолжны были считаться изменчивыми, так как они выполняют пользовательские запросы, в которых могут быть изменчивые операции. Однако они не были помечены должным образом, что было чревато неправильной оптимизацией запросов. Это было исправлено для новых инсталляций в результате корректировки исходных данных каталога, но в существующих инсталляциях ошибочные пометки сохранятся. При практическом использовании этих функций риск кажется небольшим, но в случае необходимости их можно исправить, вручную изменив записи этих функций в- pg_proc. Например:- ALTER FUNCTION pg_catalog.query_to_xml(text, boolean, boolean, text) VOLATILE. (Заметьте, что это нужно будет проделать в каждой базе данных инсталляции.) Также вы можете обновить базу до версии с корректными исходными данными, воспользовавшись pg_upgrade.
- Предотвращение повторного использования для TOAST идентификаторов OID, соответствующих уже неактуальным, но ещё не очищенным записям TOAST (Паван Деоласи) - После зацикливания счётчика OID имеется возможность использования для значения TOAST идентификатора OID, соответствующего ранее удалённой записи в той же таблице TOAST. Если запись не была очищена к тому времени, это приводило к ошибкам «unexpected chunk number 0 (expected 1) for toast value - nnnnn» (неожиданный номер порции 0 (ожидался 1) для значения TOAST- nnnnn), которые сохранялись до удаления неактуальной записи командой- VACUUM. В качестве решения выбор таких OID при создании новых записей TOAST теперь исключается.
- Изменение алгоритма - ANALYZEв части модификации- pg_class.- reltuples(Дэвид Гулд)- Ранее плотность кортежей могла обновляться только для страниц, прошедших обработку - ANALYZE, для остальных плотность считалась прежней. В большой таблице, где- ANALYZEвыбирает лишь небольшой процент страниц, это означает, что возможно лишь незначительное изменение общей оценки плотности кортежей, и поэтому- reltuplesбудет меняться практически пропорционально изменениям физического размера таблицы (- relpages) вне зависимости от того, что фактически происходит в таблице. В результате может наблюдаться настолько большое увеличение- reltuplesпо сравнению с реальностью, что автоматическая очистка практически отключается. Для исправления этой ошибки принимается, что выборка- ANALYZEявляется статистически несмещённой (какой она и должна быть), и наблюдаемая в ней плотность просто экстраполируется на всю таблицу.
- Предупреждение взаимоблокировок в параллельных командах - CREATE INDEX CONCURRENTLY, выполняемых на уровнях изоляции- SERIALIZABLEи- REPEATABLE READ(Том Лейн)
- Устранение возможности замедленного выполнения - REFRESH MATERIALIZED VIEW CONCURRENTLY(Томас Манро)
- Устранение ошибки в - UPDATE/DELETE ... WHERE CURRENT OFв случае, когда задействованный курсор использует план сканирования только индекса (Юго Нагата, Том Лейн)
- Исправление некорректного планирования, когда предложения соединения передавались в параметризованные пути (Эндрю Гирт, Том Лейн) - Эта ошибка могла привести к неправильной классификации условия как «фильтра соединения» для внешнего соединения, тогда как оно должно быть простым «фильтром», и в итоге мог получиться некорректный результат соединения. 
- Устранение возможности некорректного построения плана сканирования только индекса в случаях, когда один столбец таблицы фигурирует в нескольких индексах, но не во всех этих индексах используются классы операторов, которые могут выдать значение столбца (Кётаро Хоригути) 
- Исправление некорректной оптимизации ограничений - CHECKс гарантированными NULL-подвыражениями в условиях верхнего уровня- AND/- OR(Том Лейн, Дин Рашид)- В результате, например, ограничение-исключение могло исключить из запроса дочернюю таблицу, которая не должна быть исключена. 
- Устранение сбоя исполнителя в результате двойного освобождения памяти с некоторыми вариантами использования - GROUPING SETS(Питер Гейган)
- Предотвращение сбоя в случае, когда триггер события перезаписи таблицы добавляется одновременно с выполнением команды, которая может вызвать такой триггер (Альваро Эррера, Эндрю Гирт, Том Лейн) 
- Предотвращение ошибки при прерывании запроса или прекращении сеанса в момент фиксирования подготовленной транзакции (Стас Кельвич) 
- Ликвидация утечки памяти на время выполнения запроса в последовательно выполняемых соединениях по хешу (Том Лейн) 
- Исправление излишне строгой проверки в - heap_prepare_freeze_tuple(Альваро Эррера)- Это могло приводить к необоснованной ошибке «cannot freeze committed xmax» (не удаётся заморозить зафиксированный xmax) в базах данных, обновлённых с помощью pg_upgrade с версии 9.2 или старее. 
- Устранение потери указателя в случаях, когда написанный на С триггер, выполняемый до изменения строки, возвращает старый кортеж («old») (Рушаб Латиа) 
- Понижение уровня блокировки при планировании работы автоочистки (Джефф Джейнс) - Предыдущее поведение создавало значительные препятствия для параллельного выполнения рабочих процессов в базах, содержащих множество таблиц. 
- Обеспечение копирования имени клиентского компьютера при копировании данных - pg_stat_activityв локальную память (Эдмунд Хорнер)- Ранее предположительно локальный экземпляр содержал указатель на разделяемую память, вследствие чего содержимое поля с именем клиентского компьютера могло неожиданно измениться при отключении какого-либо сеанса. 
- Исправление некорректной обработки нескольких составных аффиксов в словарях - ispell(Артур Закиров)
- Исправление поиска (то есть сканирования индекса с операторами неравенства), зависимого от правила сортировки, в индексах SP-GiST, построенных по текстовым столбцам (Том Лейн) - Такой поиск мог возвращать неправильный набор строк для большинства правил сортировки, отличных от C. 
- Корректировка вычисления количества кортежей в индексе при изначальном построении индекса SP-GiST (Томаш Вондра) - Ранее количество кортежей в индексе считалось равным количеству кортежей в нижележащей таблице, что неверно в случае частичного индекса. 
- Корректировка вычисления количества кортежей в индексе при очистке индекса GiST (Андрей Бородин) - Ранее оно считалось равным примерному количеству кортежей в куче, что провоцировало неточность и определённо было ошибочным в случае частичного индекса. 
- Исправление поведения в особом случае, когда ведомый реплицирующий сервер «застревал» на записи продолжения WAL (Кётаро Хоригути) 
- При логическом декодировании приняты меры во избежание двойной обработки данных WAL при перезапуске передатчика WAL (Крейг Рингер) 
- Поддержка использования - scalarltselи- scalargtselс расширенными типами данных (Томаш Вондра)
- Уменьшение потребления памяти libpq в случаях, когда сервер выдаёт ошибку после получения большого объёма результата запроса (Том Лейн) - Полученный ранее результат должен быть отброшен до, а не после обработки ошибки. На некоторых платформах, в частности в Linux это может влиять на то, сколько памяти будет занимать приложение. 
- Устранение сбоев в ecpg, вызванных двойным освобождением памяти (Патрик Крекер, Дживан Ладхе) 
- Исправление обработки переменных - long long intв ecpg, собранном с использованием MSVC (Михаэль Мескес, Эндрю Гирт)
- Доработка некорректного заключения в кавычки значений для переменных GUC со списками при формировании дампа (Микаэль Пакье, Том Лейн) - Переменные - local_preload_libraries,- session_preload_libraries,- shared_preload_librariesи- temp_tablespacesне заключались в кавычки корректно в выводе pg_dump. Это могло приводить к проблемам, если эти переменным присваивались значения в конструкциях- CREATE FUNCTION ... SETили- ALTER DATABASE/ROLE ... SET.
- Предотвращение отказа pg_recvlogical при подключении к серверам PostgreSQL до 10 версии (Микаэль Пакье) - В результате предыдущего исправления программа pg_recvlogical, не проверяя версию сервера, выдавала команду, которая должна предназначаться только серверам версии 10 и новее. 
- Исправление поведения pg_rewind, чтобы на целевом сервере удалялись файлы, которые могли быть удалены в процессе выполнения на исходном сервере (Такаюки Цунакава) - В противном случае на целевом сервере могла нарушаться согласованность данных, особенно если это был файл сегмента WAL. 
- Исправление в pg_rewind обработки таблиц в дополнительных табличных пространствах (Такаюки Цунакава) 
- Исправление обработки целочисленного переполнения в циклах - FORна языке PL/pgSQL (Том Лейн)- Исправление обработки целочисленного переполнения в циклах - FORна языке PL/pgSQL (Том Лейн)
- Исправление регрессионных тестов PL/Python для совместимости с Python 3.7 (Питер Эйзентраут) 
- Исправление регрессионных тестов PL/Python для совместимости с Python 3.7 (Питер Эйзентраут) 
- Поддержка сборки с Microsoft Visual Studio 2015 (Микаэль Пакье) - Различные исправления, необходимые для совместимости с VS2015, были перенесены в ветвь 9.5 ранее, но это исправление было пропущено. 
- Переименование функций - b64_encodeи- b64_decodeво избежание конфликта со встроенными функциями Solaris 11.4 (Райнер Орт)
- Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией 2018e (Том Лейн) - В этой версии усовершенствован компилятор данных часовых поясов zic для работы с отрицательными смещениями при переходе на летнее время. Хотя проект PostgreSQL в настоящее время не поставляет такие данные часовых поясов, zic может применяться с данными, полученными непосредственно от IANA, поэтому кажется разумным обновить zic сейчас. 
- Обновление данных часовых поясов до версии tzdata 2018d, включающее изменения правил перехода на летнее время в Палестине и Антарктиде (станция Кейси), плюс корректировку исторических данных для Португалии и её колоний, а также Уругвая и островов Эндербери, Ямайка, Теркс и Кайкос.