E.11. Выпуск 9.5.15
Дата выпуска: 2018-11-08
В этот выпуск вошли различные исправления, внесённые после версии 9.5.14. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.11.1. Миграция на версию 9.5.15
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 9.5.13, см. Раздел E.16.
E.11.2. Изменения
- Устранение сбоев, которые могли возникать в особых случаях в семействе функций - has_(Том Лейн)- объект_privilege()- Эти функции должны возвращать NULL, а не выдавать ошибку при получении неверного OID. Некоторые из этих функций делали это и прежде, но не все. Кроме того, в функции - has_column_privilege()на некоторых платформах могли иметь место и другие сбои.
- Недопущение замедления порядка O(N^2) в функциях match/split с регулярными выражениями при обработке длинных строк (Эндрю Гирт) 
- Исправление дефекта в обработке стандартных многосимвольных операторов, следующих непосредственно за комментарием или символами - +и- -(Эндрю Гирт)- Следствием данного упущения могли быть ошибки при разборе или неправильное определение приоритета операторов. 
- Недопущение замедления порядка O(N^3) при обработке лексическим анализатором длинных строк из символов - +или- -(Эндрю Гирт)
- Исправление некорректного выполнения подчинённых планов при сканировании внешнего запроса в обратном направлении (Эндрю Гирт) 
- Исправление ошибочного поведения - UPDATE/DELETE ... WHERE CURRENT OF ...после перемещения курсора (Том Лейн)- Курсор, сканирующий несколько отношений (в частности, дерево наследования), мог работать неправильно, возвращаясь к предыдущему отношению. 
- Исправление в функции - EvalPlanQualобработки узлов InitPlan, которые выполняются по условию (Эндрю Гирт, Том Лейн)- Вследствие ошибки реализации могли возникать сложновоспроизводимые сбои или выдаваться неправильные результаты при одновременных запросах на изменение, содержащих изолированные вложенные - SELECTв конструкции- CASE.
- Исправление проверок классов символов для корректной поддержки в Windows символов Unicode выше U+FFFF (Том Лейн, Кэндзи Уно) - Эта ошибка проявлялась в операциях полнотекстового поиска, а также в работе модулей - contrib/ltreeи- contrib/pg_trgm.
- Смена владельца последовательности, принадлежащей сторонней таблице, при выполнении - ALTER OWNERдля этой таблицы (Питер Эйзентраут)- Операция смены владельца должна распространяться и на такие последовательности, но раньше сторонние таблицы она не затрагивала. 
- Обеспечение обработки сервером уже полученных прерываний - NOTIFYи- SIGTERMдо начала ожидания данных от клиента (Джефф Джейнс, Том Лейн)
- Устранение ошибки, приводившей к выделению лишней памяти для строки результатов - array_out()(Кэйити Хиробэ)
- Ликвидация утечки памяти при сканировании индекса SP-GiST (Том Лейн) - Сколько-нибудь значительное проявление этой утечки наблюдалось, только когда для ограничения-исключения, использующего SP-GiST, в индекс поступало много записей. 
- Закрытие файла сопоставлений в - ApplyLogicalMappingFile()после завершения его использования (Томаш Вондра)- Ранее дескриптор файла терялся, что могло в итоге приводить к сбоям при логическом декодировании. 
- Устранение ошибки логического декодирования в случаях, когда сопоставленная таблица каталога постоянно перезаписывается, например, в результате действия - VACUUM FULL(Андрес Фройнд)
- Предотвращение запуска сервера со значением - wal_level, недостаточно большим для поддержки существующего слота репликации (Андрес Фройнд)
- Предотвращение сбоя в случаях, когда служебная команда создаёт бесконечную рекурсию (Том Лейн) 
- Устранение в процессе инициализации горячего резерва проблемы дублирующихся XID, которые образуются при выполнении двухфазных транзакций на ведущем сервере (Микаэль Пакье, Константин Книжник) 
- Исправление поведения событийных триггеров при обработке вложенных команд - ALTER TABLE(Микаэль Пакье, Альваро Эррера)
- Передача параллельным исполнителям времени начала оператора и транзакции от родительского процесса (Константин Книжник) - Тем самым исправлено поведение таких функций, как - transaction_timestamp(), выполняющихся в параллельном исполнителе.
- Исправление логики переработки файла WAL для правильного выполнения этой операции на ведомых серверах (Микаэль Пакье) - В зависимости от значения параметра - archive_modeведомый сервер мог не удалить некоторые файлы WAL, подлежащие удалению.
- Исправление обработки времени фиксации транзакций в процессе восстановления (Масахико Савада, Микаэль Пакье) - Если отслеживание времени фиксации не было включено постоянно, в процессе восстановления мог произойти сбой при попытке получить время фиксации транзакции, для которой оно не было записано. 
- Использование случайной затравки для - random()в initdb, а также в сервере, запускаемом в режиме начальной загрузки и в монопольном режиме (Ной Миш)- Практическая польза этого изменения состоит прежде всего в разрешении проблемы, когда программа initdb не могла использовать общую память POSIX, считая её недоступной, из-за конфликтов имён, вызванных использованием одинаковой затравки. 
- Возможность прерывания операции выделения памяти в DSM (Крис Трэверс) 
- Исправление поведения при динамическом включении параметра - full_page_writes(Кётаро Хоригути)
- Предупреждение возможного переполнения буфера при воспроизведении операции распаковки страницы GIN из WAL (Александр Коротков, Шивасубраманьян Рамасубраманьян) 
- Выполнение операции fsync, ранее упущенной, для каталога слотов репликации (Константин Книжник, Микаэль Пакье) 
- Устранение неожиданных тайм-аутов при использовании - wal_sender_timeoutна медленном сервере (Ной Миш)
- Исправление вычисления подходящей точки согласованности WAL в процессах горячего резерва (Александр Кукушкин, Микаэль Пакье) - Выбор правильной точки позволяет предотвратить некорректное поведение сразу после того, как ведомый сервер достигает согласованного состояния базы при воспроизведении WAL. 
- Корректная остановка фоновых рабочих процессов при получении главным процессом запроса на быстрое отключение до завершения запуска базы (Александр Кукушкин) 
- Отказ от вызова обработчиков atexit при обработке - SIGQUIT(Хейкки Линнакангас)
- Исключение сопоставлений пользователей для сторонних серверов из состава расширений (Том Лейн) - При выполнении - CREATE USER MAPPINGв скрипте расширения для создаваемого сопоставления добавлялась зависимость, чего не должно быть. Сопоставления пользователей, как и роли, не могут быть членами расширений.
- Исправление поведения syslogger в случае ошибок при попытке открыть файлы CSV (Том Лейн) 
- Исправление кода psql, а также примеров в документации, чтобы функция - PQconsumeInput()вызывалась перед- PQnotifies()(Том Лейн)- Тем самым решена проблема, когда psql не выдавал полученное сообщение - NOTIFYдо следующей команды.
- Устранение возможной несогласованности при сортировке различных имён объектов в pg_dump (Джейкоб Чемпион) 
- Исправление pg_restore, чтобы при выдаче команд - DISABLE/- ENABLE TRIGGERимя таблицы дополнялось схемой (Том Лейн)- Это предотвращает сбои, возможные при новой политике выполнения восстановления с ограниченным путём поиска. 
- В pg_upgrade исправлена обработка событийных триггеров в расширениях (Харибабу Комми) - Ранее pg_upgrade не сохранял связь событийных триггеров с расширениями. 
- Исправление проверки состояния кластера в pg_upgrade, чтобы она корректно выполнялась на ведомом сервере (Брюс Момджян) 
- Ограничение числа размерностей в значениях - cubeво всех функциях- contrib/cube(Андрей Бородин)- Ранее в некоторых функциях, связанных с кубами, можно было создать такие значения, которые затем не принимала функция - cube_in(), что вызывало ошибки при восстановлении выгруженных данных.
- Исправление функции - unaccent()в расширении- contrib/unaccent, чтобы она использовала словарь текстового поиска- unaccent, находящийся в той же схеме, где и сама функция (Том Лейн)- Ранее она пыталась найти словарь по пути поиска, но могла не обнаружить его, если путь поиска был ограничен. 
- Устранение проблем при сборке в macOS 10.14 (Mojave) (Том Лейн) - Усовершенствование скрипта configure, чтобы в - CPPFLAGSдобавлялся ключ- -isysroot; без этого PL/Perl и PL/Tcl нельзя сконфигурировать или собрать в macOS 10.14. Значение sysroot можно переопределить во время конфигурирования или сборки, установив переменную- PG_SYSROOTв аргументах configure или make.- Теперь рекомендуется, чтобы для связанных с Perl расширений во флагах компилятора указывалось - $(perl_includespec), а не- -I$(perl_archlibexp)/CORE. Второй вариант по-прежнему будет работать на большинстве платформ, но не в последних macOS.- Также теперь не требуется указывать вручную ключ - --with-tclconfig, чтобы собрать PL/Tcl в последних версиях macOS.
- Исправление скриптов сборки с MSVC и регрессионного тестирования для работы с последними версиями Perl (Эндрю Дунстан) - Это изменение вызвано тем, что Perl теперь по умолчанию не включает текущий каталог в свой путь поиска. 
- Реализована возможность запускать регрессионные тесты в Windows с учётной записью администратора (Эндрю Дунстан) - Чтобы это было безопасно, pg_regress теперь лишает себя расширенных прав при запуске. 
- Поддержка сборки в Windows с Visual Studio 2015 и Visual Studio 2017 (Микаэль Пакье, Харибабу Комми) 
- Снятие запрета на возврат из функций сравнения btree значений - INT_MIN(Том Лейн)- До настоящего времени мы не позволяли типозависимым функциям сравнения возвращать - INT_MIN, благодаря чему вызывающий код мог сменить порядок сортировки, просто изменив знак результата сравнения. Однако это могло вызывать проблемы с функциями сравнения, возвращающими непосредственно результат- memcmp(),- strcmp()и подобных функций, так как POSIX не накладывает на него никаких ограничений. Как минимум некоторые последние версии- memcmp()могут возвращать- INT_MIN, что приводило к нарушению порядка сортировки. В связи с этим мы убрали это ограничение. Там же, где требуется поменять порядок сортировки на противоположный, теперь нужно использовать макрос- INVERT_COMPARE_RESULT().
- Устранение риска рекурсии при обработке сообщений об аннулировании общего кеша (Том Лейн) - Эта ошибка могла привести, например, к сбою при обращении к системному каталогу или индексу, который был только что обработан командой - VACUUM FULL.- В результате этого изменения функция - LockAcquireтеперь может возвращать новый код результата, что теоретически может вызвать проблемы при использовании этой функции, хотя для этого схема её использования должна быть весьма необычной. Также был изменён API функции- LockAcquireExtended.
- Сохранение и восстановление глобальных переменных SPI в - SPI_connect()и- SPI_finish()(Чепмен Флэк, Том Лейн)- Это предотвращает накладки, возможные при вызове из одной функции, использующей SPI, другой такой функции. 
- Добавление определения - ALLOCSET_DEFAULT_SIZESи связанных с ним макросов в ветви старых версий (Том Лейн)- Эти макросы появились в версии 9.6, но поступали запросы добавить их и в старые версии, чтобы ими можно было пользоваться в расширениях, обходясь без лишних условий. 
- Предотвращение использования потенциально невыравненных буферов страниц (Том Лейн) - Добавлены новые типы-объединения - PGAlignedBlockи- PGAlignedXLogBlock, которые должны использоваться вместо простых массивов char, чтобы компилятор гарантированно выравнивал адрес начала буфера. В результате устраняется риск аварийного сбоя на платформах, чувствительных к выравниванию, и может увеличиться быстродействие даже на тех платформах, где выравнивание не требуется.
- Приведение в - src/port/snprintf.cзначения результата- snprintf()в соответствие со стандартом C99 (Том Лейн)- На платформах, где этот код используется (в основном в Windows), его несовременное поведение (не соответствующие C99) могло препятствовать выявлению переполнения буфера, если вызывающий код рассчитывал на семантику C99. 
- Требование обязательного использования - -msse2при сборке компилятором clang для i386 (Андрес Фройнд)- Тем самым решается проблема отсутствия проверок переполнения при операциях с плавающей точкой. 
- Исправление в configure проверки, определяющей, результат какого типа возвращает - strerror_r()(Том Лейн)- Предыдущая реализация давала неправильный ответ при сборке с использованием компилятора icc в Linux (возможно, и в других случаях), в результате чего libpq не выдавала полезные сообщения при возникновении системных ошибок. 
- Обновление данных часовых поясов до версии tzdata 2018g, включающее изменения правил перехода на летнее время в России (Волгограде), Чили, Марокко и на Фиджи, а также корректировку исторических данных для Китая, Гавайев, Японии, Макао и Северной Кореи.