E.47. Выпуск 10.3
Дата выпуска: 2018-03-01
В этот выпуск вошли различные исправления, внесённые после версии 10.2. За информацией о нововведениях версии 10 обратитесь к Разделу E.50.
E.47.1. Миграция на версию 10.3
Если используется версия 10.X, выгрузка/восстановление базы не требуется.
Однако если в вашей СУБД не все пользователи взаимно доверяют друг другу либо если вы поддерживаете приложение или расширение, предназначенное для использования в произвольных ситуациях, настоятельно рекомендуется прочитать об изменениях в первой записи ниже и предпринять соответствующие действия для защиты вашей инсталляции или кода.
Также изменения, описанные во втором пункте списка ниже, могут приводить к сбоям функций, используемых в индексных выражениях или материализованных представлениях, во время автоматического анализа или при восстановлении выгруженных данных. Поэтому после обновления проверьте журнал сервера на предмет подобных проблем и исправьте затронутые функции.
Также, если вы обновляете сервер с более ранней версии, чем 10.2, см. Раздел E.48.
E.47.2. Изменения
- Добавление в документацию информации о настройке серверов и приложений для защиты от атак с внедрением троянского кода через путь поиска (Ной Миш) - Когда используется значение - search_path, включающее схемы, доступные для записи злонамеренному пользователю, он может перехватывать управление над выполнением запросов и затем запускать произвольный SQL-код с правами атакуемого пользователя. Хотя есть возможность составлять запросы, защищённые от подобного перехвата, это требует кропотливой работы, и при этом очень легко что-то упустить. Поэтому мы рекомендуем использовать конфигурации, в которых пути поиска не могут включать недоверенные схемы. Соответствующая информация добавлена в Подраздел 5.8.6 (для пользователей и администраторов баз данных), Раздел 31.1 (для разработчиков приложений), Подраздел 35.15.6 (для разработчиков расширений) и CREATE FUNCTION (для разработчиков функций с характеристикой- SECURITY DEFINER). (CVE-2018-1058)
- Предотвращение использования небезопасных значений - search_pathв pg_dump и других клиентских программах (Ной Миш, Том Лейн)- pg_dump, pg_upgrade, vacuumdb и другие приложения, предоставляемые PostgreSQL, были уязвимы для перехвата выполнения, описанного в предыдущем пункте; так как эти приложения обычно запускаются суперпользователями, они представляли собой привлекательные средства для атаки. Чтобы защитить их вне зависимости от того, защищена ли вся инсталляция в целом, они были изменены так, чтобы для них параметр - search_pathсодержал только- pg_catalog. Теперь это так же касается и рабочих процессов автоочистки.- В случаях, когда этими программами неявно вызываются определённые пользователем функции — например, это могут быть пользовательские функции в выражениях индексов — более строгое значение - search_pathможет приводить к ошибкам, которые потребуется исправить так, чтобы эти функции никак не зависели от пути поиска, с которым они выполняются. Это всегда рекомендовалось делать, но сейчас это необходимо для корректного поведения. (CVE-2018-1058)
- Предотвращение попыток логической репликации передавать изменения в непубликуемых отношениях (Питер Эйзентраут) - Публикация всех таблиц (с пометкой - FOR ALL TABLES) могла некорректно передавать изменения в материализованных представлениях и таблицах- information_schema, которые не должны попадать в поток изменений.
- Исправление некорректного поведения перепроверок одновременных изменений со ссылками CTE, фигурирующими во внутренних планах (Том Лейн) - Если ссылка на CTE (содержимое предложения - WITH) использовалась в InitPlan или SubPlan, и запросу требовалось провести перепроверку из-за попытки изменения или блокировки одновременно изменяемой строки, могли быть получены неверные результаты.
- Устранение сбоев планировщика при перекрывающихся предложениях соединения слиянием во внешнем соединении (Том Лейн) - Эти дефекты приводили в особых случаях к ошибкам планировщика «left and right pathkeys do not match in mergejoin» (нарушено соответствие левых и правых ключей пути в соединении слиянием) или «outer pathkeys do not match mergeclauses» (внешние ключи пути не соответствуют предложениям слияния). 
- Исправление ошибки в pg_upgrade, когда не удавалось сохранить - relfrozenxidдля материализованных представлений (Том Лейн, Андрес Фройнд)- Данное упущение могло приводить к разрушению данных в материализованных представлениях после обновления. Это могло проявляться в ошибках «could not access status of transaction» (не удалось получить состояние транзакции) или «found xmin from before relfrozenxid» (найден xmin перед relfrozenxid). Эта проблема была более вероятна в редко обновляемых материализованных представлениях или в представлениях, обновляемых только командой - REFRESH MATERIALIZED VIEW CONCURRENTLY.- Если такое разрушение имело место, его можно исправить, обновив материализованное представление (без указания - CONCURRENTLY).
- Исправление некорректного вывода pg_dump для некоторых граничных значений последовательностей (Алексей Баштанов) 
- Исправление неправильной обработки в pg_dump объектов - STATISTICS(Том Лейн)- Схема объекта расширенной статистики неправильно помечалась в оглавлении таблицы выгружаемых данных, что могло приводить к некорректным результатам при восстановлении отдельных схем. Также некорректно восстанавливалась информация о владельце. Кроме того, логика работы изменена так, чтобы объекты статистики выгружались/восстанавливались или нет как независимые объекты, без учёта того, производится ли выгрузка/восстановление таблицы, к которой они привязаны. Исходное определение не должно распространяться на планируемое будущее расширение статистики нескольких таблиц. 
- Исправление некорректной обработки имён функций PL/Python в стеках ошибки - CONTEXT(Том Лейн)- Ошибка, произошедшая во вложенном вызове функции PL/Python (то есть функции, вызванной через SPI-запрос из другой функции PL/Python), могла привести к тому, что в трассировке стека вместо ожидаемого результата имя внутренней функции фигурировало дважды. Также ошибка во вложенном блоке PL/Python - DOмогла привести к обращению по нулевому указателю на некоторых платформах.
- Максимальное значение - log_min_durationдля- contrib/auto_explainдоведено до- INT_MAX, что составляет около 24 суток вместо 35 минут (Том Лейн)
- Для разнообразных переменных GUC добавлена пометка - PGDLLIMPORTв целях облегчения переноса модулей расширений в Windows (Метин Дослу)