E.15. Выпуск 9.5.11
Дата выпуска: 2018-02-08
В этот выпуск вошли различные исправления, внесённые после версии 9.5.10. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.15.1. Миграция на версию 9.5.11
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 9.5.10, см. Раздел E.16.
E.15.2. Изменения
- Временные файлы, создаваемые программой pg_upgrade, должны быть недоступны для чтения всеми пользователями (Том Лейн, Ной Миш) - Программа pg_upgrade обычно ограничивает доступ к своим временным файлам, чтобы их мог читать и записывать только запускающий её пользователь. Но временные файлы, содержащие вывод - pg_dumpall -gмогли быть доступны для чтения группе или всем пользователям, а возможно и для записи, если это допускало значение- umaskэтого пользователя. При типичном использовании в многопользовательских системах- umaskи/или разрешения в рабочем каталоге достаточно жёсткие и эта проблема неактуальна; но pg_upgrade может использоваться и в сценариях, где это упущение могло привести, например, к утечке паролей баз данных. (CVE-2018-1053)
- Исправление очистки кортежей, которые были изменены при установленной блокировке разделяемого ключа (Андрес Фройнд, Альваро Эррера) - В некоторых случаях операция - VACUUMне удаляла такие кортежи, даже когда они теряли актуальность, что приводило к различным сценариям повреждения данных.
- Исправление неправильной блокировки буфера при некоторых чтениях LSN (Якоб Чемпион, Асим Правин, Ашвин Агравал) - Эти ошибки могли приводит к некорректному поведению при многопоточной нагрузке. Потенциальные последствия не были характеризованы полностью. 
- Исправление некорректных результатов запросов в случаях, когда происходило упрощение подзапросов, результаты которых использовались в - GROUPING SETS(Хейкки Линнакангас)
- Исключение неоправданной ошибки в запросе с деревом наследования, который выполнялся одновременно с тем, как некоторая дочерняя таблица удалялась из этого дерева командой - ALTER TABLE NO INHERIT(Том Лейн)
- Устранение разнообразных ошибок взаимоблокировки при выполнении в нескольких сеансах команды - CREATE INDEX CONCURRENTLY(Джефф Джейнс)
- Устранение ошибок в ситуациях, когда дерево наследования содержит дочерние сторонние таблицы (Эцуро Фудзита) - Комбинация обычных и сторонних таблиц в дереве наследования провоцировала построение некорректных планов в запросах - UPDATEи- DELETE. Это приводило к видимым ошибкам в некоторых случаях, особенно когда в дочерней сторонней таблице присутствовали триггеры уровня строк.
- Исправление дефекта со связанным подзапросом - SELECTвнутри- VALUESв подзапросе- LATERAL(Том Лейн)
- Устранение ошибки планировщика «could not devise a query plan for the given query» (не удалось выработать план для данного запроса) в некоторых случаях, включая вложенные - UNION ALLв подзапросе LATERAL (Том Лейн)
- Исправление логического декодирования, чтобы файлы на диске корректно очищались от данных сбойных транзакций (Атсуши Торикоши) - Процедура логического декодирования может выносить записи WAL на диск, если транзакции генерируют много записей WAL. Обычно эти файлы очищаются после фиксирования транзакции или поступления записи о её прерывании; но в отсутствие таких записей код очистки работал неправильно. 
- Исправление тайм-аута в процессе walsender и реакции на прерывания при обработке большой транзакции (Петр Желинек) 
- Добавление в - has_sequence_privilege()поддержки проверок- WITH GRANT OPTION, как это сделано в других функциях проверки прав (Джо Конвей)
- В базах данных с кодировкой UTF8 любые XML-объявления, выбирающие другую кодировку, должны игнорироваться (Павел Стехуле, Ной Миш) - Мы всегда храним документы XML в кодировке базы данных, так что позволяя libxml обрабатывать объявления с другой кодировкой, мы получим ошибочные результаты. Если кодировка базы — не UTF8, мы в любом случае не обещали поддерживать XML-данные с не ASCII-кодировкой, так что предыдущее поведение сохранено для совместимости ошибок. Это изменение затрагивает только - xpath()и связанные функции; другой код и ранее работал так.
- Обеспечение прямой совместимости с будущими изменениями младших версий протокола (Роберт Хаас, Бадрул Чоудхури) - Ранее серверы PostgreSQL просто отклоняли запросы на использование версий протокола новее 3.0, так что никакого функционального отличия старших номеров от младших не было. Теперь клиенты могут запрашивать версии 3.x и получать в ответ не отказ, а сообщение, говорящее, что сервер поддерживает только версию 3.0. В данный момент от этого ничего не меняется, но перенос этого изменения в предыдущие версии должен ускорить внедрение небольших усовершенствований протокола в будущем. 
- Исправление реакции на сбой при запуске параллельного рабочего процесса (Амит Капила, Роберт Хаас) - Ранее параллельный запрос мог зависнуть на неопределённое время, если не удавалось запустить рабочий процесс, вследствие ошибки в - fork()или других редких проблем.
- Устранение небезопасного предположения о выравнивании при работе с типом - __int128(Том Лейн)- Обычно компиляторы полагают, что переменные - __int128выравниваются по 16-байтовым границам, но наша инфраструктура выделения памяти не готова гарантировать это, а увеличение MAXALIGN кажется неподходящим по множеству причин. В качестве решения код был изменён так, чтобы тип- __int128можно было использовать только когда мы можем сказать компилятору, что предполагается не такое крупное выравнивание. Единственный замеченный симптом этой проблемы — сбои в некоторых параллельных запросах с агрегированием.
- Предотвращение сбоев с переполнением стека при планировании операций со множествами с крайне большой вложенностью ( - UNION/- INTERSECT/- EXCEPT) (Том Лейн)
- Ликвидация обращений по нулевому указателю для некоторых типов адресов LDAP, задаваемых в файле - pg_hba.conf(Томас Манро)
- Исправление демонстрационных функций - INSTR()в документации по PL/pgSQL (Юго Нагата, Том Лейн)- В документации утверждалось, что эти функции совместимы с Oracle®, но это было не совсем так. В частности, по-разному интерпретировалось отрицательное значение третьего параметра: Oracle воспринимает это значение как последнюю позицию, с которой может начинаться целевая подстрока, а наши функции считали, что это последняя позиция, где строка может заканчиваться. Также Oracle выдаёт ошибку в случае нулевого или отрицательного четвёртого параметра, тогда как наши функции возвращали ноль. - Код этого примера был изменён для большего соответствия поведению Oracle. Пользователям, которые скопировали этот код в свои приложения, возможно, имеет смысл обновить свои копии. 
- Исправление поведения pg_dump, чтобы ACL (разрешения), комментарии и метки безопасности можно было надёжно идентифицировать в архивных выходных форматах (Том Лейн) - Компонент «метка» записи ACL в архиве обычно представлял собой просто имя целевого объекта. В его начало теперь добавляется тип объекта, чтобы записи ACL соответствовали соглашениям, уже принятым для записей комментариев и меток безопасности. Кроме того, обозначения комментариев и меток безопасности, заданных для собственно базы данных, теперь должны начинаться с - DATABASE, чтобы они соответствовали тому же соглашению. Это предупреждает ложные срабатывания в коде, который пытается найти записи больших объектов по строкам, начинающимся со слов- LARGE OBJECT. Прежнее поведение могло приводить к неправильной классификации записей как данные и нежелательным результатам при восстановлении выгруженной только схемы или только данных.- Заметьте, что следствием этого стало изменение видимого пользователями вывода - pg_restore --list.
- Переименование функции - copy_file_rangeв pg_rewind во избежание конфликта с новым системным вызовом Linux с таким же именем (Андрес Фройнд)- Это изменение предотвращает ошибки при сборке с новыми версиями glibc. 
- В ecpg добавлено выявление массивов индикаторов с неправильной длиной и сообщение об ошибке (Дэвид Рейдер) 
- Предотвращение срабатывания проверки истинности внутри libc в расширении - contrib/hstoreиз-за использования- memcpy()с равными указателями источника и получателя (Томаш Вондра)
- Добавление современных примеров настройки автозапуска Postgres в macOS (Том Лейн) - Скрипты в - contrib/start-scripts/osxиспользуют инфраструктуру, которая устарела десять лет назад, и абсолютно неработоспособны во всех версиях macOS, выпущенных в последние два года. Добавлен новый подкаталог- contrib/start-scripts/macosсо скриптами, использующими новую инфраструктуру launchd.
- Исправление некорректного выбора зависящих от конфигурации библиотек OpenSSL в Windows (Эндрю Дунстан) 
- Поддержка компоновки с версиями libperl, собранными компилятором MinGW (Ной Миш) - Это позволяет собирать PL/Perl с некоторыми распространёнными дистрибутивами Perl для Windows. 
- Исправление в сборке MSVC проверки, требуется ли 32-битной libperl определение - -D_USE_32BIT_TIME_T(Ной Миш)- Имеющиеся дистрибутивы Perl ожидают разного, и при этом нет никакой возможности надёжно проверить это, поэтому пришлось добавить проверку фактического поведения используемой библиотеки во время компиляции. 
- В Windows обработчик аварийного завершения должен устанавливаться на более раннем этапе запуска главного процесса (Такаюки Цунакава) - Это поможет получить дамп памяти при ошибках в те моменты в начале запуска, в которые раньше дамп не записывался. 
- В Windows устранены сбои, связанные с преобразованием кодировок при выводе сообщений на самых ранних стадиях запуска процесса postmaster (Такаюки Цунакава) 
- Использование нашего ранее написанного кода циклических блокировок для Motorola 68K во OpenBSD, а также в NetBSD (Давид Карлье) 
- Добавление поддержки циклических блокировок для Motorola 88K (Давид Карлье) 
- Обновление данных часовых поясов до версии tzdata 2018c, включающее изменения правил перехода на летнее время в Бразилии, в Сан-Томе и Принсипи, а также корректировки исторических данных для Боливии, Японии и Южного Судана. Был удалён часовой пояс - US/Pacific-New(это был просто псевдоним для пояса- America/Los_Angeles).