E.19. Выпуск 9.5.7
Дата выпуска: 2017-05-11
В этот выпуск вошли различные исправления, внесённые после версии 9.5.6. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.19.1. Миграция на версию 9.5.7
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если вы используете сторонние серверы данных, на которых для проверки подлинности применяются пароли, прочитайте ниже первую запись в списке изменений.
А если вы используете сторонние средства репликации, основанные на «логическом декодировании», обратите внимание на четвёртую запись в списке изменений.
Также, если вы обновляете сервер с более ранней версии, чем 9.5.6, см. Раздел E.20.
E.19.2. Изменения
- Ограничение видимости - pg_user_mappings.- umoptionsдля защиты паролей, сохранённых в свойствах сопоставлений пользователей (Микаэль Пакье, Фейке Стинберген)- Предыдущая реализация позволяла владельцу объекта стороннего сервера или любому, кто получил право - USAGE, видеть свойства всех сопоставлений, связанных с этим сервером. В том числе это могли быть и пароли других пользователей. Теперь определение данного представления изменено для соответствия поведению- information_schema.user_mapping_options, так что эти свойства может прочитать только собственно пользователь сопоставления либо, если это сопоставление роли- PUBLIC, владелец сервера, либо суперпользователь. (CVE-2017-7486)- Само по себе это исправление корректирует поведение только в новых базах данных, создаваемых initdb. Если вы хотите применить это исправление к существующей базе данных, следуйте исправленной процедуре в списке изменений, относящейся к CVE-2017-7547, в Разделе E.18. 
- Предотвращение утечки статистической информации через негерметичные операторы (Питер Эйзентраут) - Некоторые функции оценки избирательности в планировщике применяют пользовательские операторы к значениям, получаемым из - pg_statistic, например, к наиболее частым значениям и элементам гистограммы. Это происходит до проверки прав доступа к таблице, так что злонамеренный пользователь может воспользоваться этим и получить подобные значения из столбцов таблицы, чтение которых ему запрещено. Для устранения этой уязвимости следует переходить к общим оценкам, если функция, реализующая оператор, не считается герметичной и вызывающий её пользователь не имеет права на чтение столбца, статистика по которому требуется планировщику. На практике в большинстве случаев одно из этих условий выполняется. (CVE-2017-7484)
- Восстановление восприятия библиотекой libpq переменной окружения - PGREQUIRESSL(Даниэль Густафссон)- Поддержка этой переменной окружения была непреднамеренно ликвидирована в PostgreSQL 9.3, но в документации она осталась. Это создало угрозу безопасности, так как пользователи могли рассчитывать на то, что она будет требовать SSL-шифрования подключений, но на самом деле этого не происходило. Теперь эта переменная воспринимается как и раньше, но имеет меньший приоритет, чем - PGSSLMODE, во избежание нарушения конфигураций, работающих корректно с версиями после 9.3. (CVE-2017-7485)
- Исправление потенциально некорректного начального снимка при логическом декодировании (Петр Желинек, Андрес Фройнд) - Изначальный снимок, создаваемый для слота репликации с логическим декодированием, мог быть некорректным. В результате сторонние средства, использующие логическое декодирование, могли получать неполные/несогласованные начальные данные. Вероятность такого сбоя увеличивалась, если при создании слота исходный сервер был загружен либо уже существовал другой логический слот. - Если вы используете средство репликации, основанное на логическом декодировании, и копировали непустой набор данных в начале репликации, имеет смысл пересоздать реплику после установления этого обновления либо сверить содержимое базы с исходным сервером. 
- Исправление потенциального повреждения «слоёв инициализации» нежурналируемых индексов (Роберт Хаас, Микаэль Пакье) - Это повреждение могло приводить к переходу нежурналируемого индекса в ошибочное состояние после сбоя и перезапуска сервера. Устранить возникшую проблему можно было, только удалив и перестроив индекс. 
- Исправление ошибочного восстановления записей - pg_subtransпри воспроизведении резервным сервером подготовленных, но не зафиксированных двухфазных транзакций (Том Лейн)- В большинстве случаев это не имело никаких болезненных последствий, но в особых ситуациях могло приводить к зацикливанию ссылок в - pg_subtrans, что, в свою очередь, провоцировало бесконечные циклы в запросах, обращающимся к строкам, изменённым двухфазной транзакцией.
- Предотвращение возможного сбоя в walsender при ошибке инициализации буфера строки (Стас Кельвич, Фудзии Масао) 
- Предупреждение возможного сбоя при повторном сканировании индекса GiST с использованием только индекса и поиском ближайших соседей (Том Лейн) 
- Исправление поведения postmaster при обработке сбоя - fork()для фонового рабочего процесса (Том Лейн)- Ранее postmaster модифицировал элементы своего состояния так, как будто процесс был запущен успешно, что впоследствии приводило к замешательству. 
- Устранение сбоев или неверных ответов в случаях, когда тип данных столбца в - GROUPING SETSявляется хешируемым, но не сортируемым (Паван Деоласи)
- Исключение применения оптимизации «физического целевого списка» к нестандартным сканированиям (Дмитрий Иванов, Том Лейн) - Эта оптимизация предполагала, что получить все столбцы кортежа можно недорого, что действительно верно для обычных кортежей Postgres, но с нестандартными провайдерами сканирования это может быть не так. 
- Использование правильного подвыражения при применении политики защиты на уровне строк - FOR ALL(Стивен Фрост)- В некоторых случаях применялось ограничение - WITH CHECK, хотя более уместным было бы ограничение- USING.
- Обеспечение видимости результатов непосредственно предшествующих DDL при разборе запросов в скриптах расширений (Жюльен Руо, Том Лейн) - Из-за того, что кеш между командами в скрипте расширения не сбрасывался, запрос к данным мог не наблюдать эффектов непосредственно предшествующего ему изменения каталога, например результатов - ALTER TABLE ... RENAME.
- Ликвидация проверки прав доступа к табличному пространству при перестроении существующего индекса командой - ALTER TABLE ... ALTER COLUMN TYPE(Ной Миш)- Это команда выдавала ошибку, если вызывающий пользователь не имел права - CREATEдля табличного пространства, содержащего индекс. Такое поведение малополезно, так что стоит исключить эту проверку и разрешить перестраивать индекс там, где он находился.
- Предотвращение рекурсивного обращения команды - ALTER TABLE ... VALIDATE CONSTRAINTк дочерним таблицам когда ограничение помечено как- NO INHERIT(Амит Ланготе)- Это предупреждает нежелательные сбои типа «constraint does not exist» (ограничение не существует) в случаях, когда в дочерних таблицах нет соответствующего ограничения. 
- Устранение потери указателя в - COPY ... TOкогда для исходной таблицы активна защита на уровне строк (Том Лейн)- Обычно это не имело болезненных последствий, но иногда всё же приводило к неожиданным ошибкам и сбоям. 
- Предупреждение обращения к уже закрытому элементу relcache в - CLUSTERи- VACUUM FULL(Том Лейн)- При особом стечении обстоятельств это могло приводить к тому, что индексы в целевом отношении перестраивались с неправильным режимом сохранения. 
- Исправление ошибки команды - VACUUM, когда она неправильно учитывала страницы, которые не могла прочитать из-за конфликтующих закреплений страниц (Эндрю Гирт)- Это провоцировало недооценивание количества кортежей в таблице. В худшем случае с чрезвычайно востребованной таблицей команда - VACUUMмогла ошибочно сообщить, что таблица вовсе не содержит кортежей, что приводило к очень плохим решениям при планировании.
- Обеспечение возможности прерывания циклов массовой передачи кортежей в соединении по хешу при попытке отмены запроса (Том Лейн, Томас Манро) 
- Исправление проблем с переполнением целочисленных значений при сравнении типов - interval(Кётаро Хоригути, Том Лейн)- Операторы сравнения для типа - intervalмогли выдавать неверные ответы для интервалов, превышающих 296000 лет. Индексы по столбцам с такими большими значениями следует перестроить, так как они могут быть испорчены.
- Исправление функции - cursor_to_xml(), чтобы она выдавала правильный результат с- tableforest= false (Томас Манро, Питер Эйзентраут)- Ранее она не добавляла внешний элемент - <table>.
- Устранение проблем с округлением в функциях - float8_timestamptz()и- make_interval()(Том Лейн)- Эти функции отбрасывали дробную часть, а не округляли числа при преобразовании значения с плавающей точкой к целому числу микросекунд; это могло приводить к неожиданным сдвигам результатов на единицу. 
- Исправление функции - pg_get_object_address()для членов семейств операторов (Альваро Эррера)
- Улучшение производительности представления - pg_timezone_names(Том Лейн, Дэвид Роули)
- Уменьшение издержек при управлении памятью для контекстов, содержащих множество больших блоков (Том Лейн) 
- Исправление неаккуратной обработки редких ошибок в - lseek()и- close()(Том Лейн)- В типичных ситуациях эти системные вызовы отрабатывают без ошибок, но в случае ошибки код - fd.cмог повести себя некорректно.
- Исправление некорректной проверки факта работы postmaster в виде службы Windows (Микаэль Пакье) - Вследствие ошибки для вывода сообщений мог выбираться системный журнал событий (там где его на самом деле не было), так что запись сообщений фактически не производилась. 
- Исправление в ecpg поддержки - COMMIT PREPAREDи- ROLLBACK PREPARED(Масахико Савада)
- Исправление ошибки двойного освобождения при обработке строковых констант, заключённых в доллары, в ecpg (Михаэль Мескес) 
- В pg_dump исправлена пометка схемы и владельца для комментариев и меток безопасности некоторых типов объектов БД (Джузеппе Брокколо, Том Лейн) - В простых случаях это не проявлялось никак, но например, при восстановлении с выбором схемы, могли потеряться комментарии, которые в ней должны быть, из-за того, что они не были помечены как принадлежащие схеме своего объекта. 
- Предотвращение вывода командой - pg_restore -lнекорректного файла со списком объектов, когда имена объектов SQL содержат символы перевода строки (Том Лейн)- Символы перевода строки заменяются пробелами, что достаточно для того, чтобы этот список корректно обработала команда - pg_restore -L.
- Исправление поведения pg_upgrade для корректного переноса комментариев и меток безопасности, связанных с «большими объектами» (BLOB) (Стивен Фрост) - Ранее такие объекты корректно переносились в новую базу данных, но связанные с ними комментарии и метки безопасности терялись. 
- Улучшение обработки ошибок в функции - pg_file_write()из- contrib/adminpack(Ной Миш)- В частности, она не реагировала на ошибки в вызове - fclose().
- Предупреждение утечки предыдущего безымянного соединения при установлении нового безымянного соединения в - contrib/dblink(Джо Конвей)
- Исправление извлечения триграмм из регулярных выражений в - contrib/pg_trgm(Том Лейн)- В некоторых случаях это могло приводить к формированию испорченной структуры данных, для которой отсутствуют какие-либо соответствия. Вследствие этого при сканировании по индексам GIN и GiST с использованием триграмм для регулярного выражения могли не находиться никакие результаты. 
- В - contrib/postgres_fdwреализована передача требования отмены запроса удалённому серверу (Микаэль Пакье, Эцуро Фудзита)- Ранее требование на отмену локального запроса не влекло за собой досрочную отмену удалённого запроса, уже переданного на выполнение. Это доработка ранее была реализована в 9.6 и теперь перенесена в 9.5. 
- Поддержка Tcl 8.6 в сборках с MSVC (Альваро Эррера) 
- Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией tzcode2017b (Том Лейн) - Это устраняет ошибку с некоторыми вариантами перехода на летнее время в январе 2038. 
- Обновление данных часовых поясов до версии tzdata 2017b, включающее изменение правил перехода на летнее время в Чили, Монголии и на Гаити, а также исторические изменения для Эквадора, Казахстана, Либерии и Испании. Переход к числовым аббревиатурам для ряда часовых поясов в Южной Америке, в Тихом и Индийском океанах, а также в некоторых азиатских и ближневосточных странах. - Ранее в базе данных часовых поясов IANA предоставлялись текстовые аббревиатуры для всех часовых поясов и иногда при этом указывались аббревиатуры, которые практически не употреблялись местным населением. Сейчас происходит процесс ухода от этой практики в пользу использования числовых смещений UTC в тех часовых поясах, где нет никаких свидетельств реального использования английской аббревиатуры. Как минимум на данном этапе, PostgreSQL продолжит принимать подобные удалённые аббревиатуры при вводе дат/времени. Но они не будут видны при просмотре представления - pg_timezone_namesи не будут выводиться с датами/временем.
- Использование корректных правил перехода на летнее время для названий часовых поясов в стиле POSIX при сборке с MSVC (Дэвид Роули) - Сборочные скрипты для MSVC не устанавливали корректно файл - posixrulesв дерево каталогов timezone. Это приводило к тому, что код timezone переходил к использованию встроенных представлений о том, какой вариант перехода на летнее время применим для названия пояса в стиле POSIX. По историческим причинам это соответствует правилам, которые действовали в США до 2007 г. (то есть переход на летнее время происходил в первое воскресенье апреля, а на зимнее — в последнее воскресенье октября). С этим исправлением для часового пояса с названием в стиле POSIX будут использоваться текущие и исторические даты перехода для пояса- US/Eastern. Если для вас это нежелательно, удалите файл- posixrulesили замените его файлом другого часового пояса (см. Подраздел 8.5.3). Учтите, что вследствие кеширования вам потребуется перезапустить сервер, чтобы подобные изменения вступили в силу.