E.44. Выпуск 9.6.13
Дата выпуска: 2019-05-09
В этот выпуск вошли различные исправления, внесённые после версии 9.6.12. За информацией о нововведениях версии 9.6 обратитесь к Разделу E.57.
E.44.1. Миграция на версию 9.6.13
Если используется версия 9.6.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 9.6.9, см. Раздел E.48.
E.44.2. Изменения
- Устранение возможности обойти политики защиты на уровне строк (RLS), используя оценки избирательности (Дин Рашид) - При вычислении оценок избирательности планировщик применяет пользовательские операторы к значениям, находящимся в - pg_statistic(то есть к самым частым значениям). Таким образом, негерметичный оператор может раскрыть некоторые данные в столбце таблицы, даже если пользователь не имеет доступа к этому столбцу. В CVE-2017-7484 мы добавили ограничения для предотвращения этой утечки, но не учли особенности защиты на уровне строк. Пользователь, которому в SQL дано право чтения столбца, но политикой RLS запрещён доступ к некоторым строкам, тем не менее мог получить некоторые сведения об их содержимом через негерметичный оператор. Это исправление усиливает ограничения, разрешая применение негерметичных операторов к статистическим данным только при отсутствии политики RLS. (CVE-2019-10130)
- Исправление поведения - UPDATEи- DELETEпри работе с деревом наследования или секционированной таблицей, допускающими исключение всех таблиц (Амит Ланготе, Том Лейн)- Ранее в подобных условиях такие запросы не выдавали корректный набор выходных столбцов с предложением - RETURNING. Помимо этого, в этих запросах также не срабатывали никакие триггеры уровня операторов.
- Исправление обработки явных элементов - DEFAULTв команде- INSERT ... VALUESс несколькими строками- VALUES, целевым отношением для которой является обновляемое представление (Амит Ланготе, Дин Рашид)- Когда в обновляемом представлении для столбца не задано значение по умолчанию, но оно задано в нижележащей таблице, команда - INSERT ... VALUESс одной строкой вставит в столбец это значение по умолчанию. Однако при выполнении этой команды с несколькими строками вместо этого значения всегда вставлялся NULL. Теперь это исправлено, и такая команда выполняется так же, как и команда с одной строкой.
- Исправление - CREATE VIEW, позволяющее создавать представления с нулём столбцов (Ашутош Шарма)- Мы должны разрешить это для согласованности с возможностью создавать таблицы с нулём столбцов. Так как таблицу можно преобразовать в представление, ранее такое представление можно было получить даже при существовавшем ограничении, что приводило к сбоям при выгрузке/загрузке базы данных. 
- Добавление поддержки - CREATE TABLE IF NOT EXISTS ... AS EXECUTE ...(Андреас Карлссон)- Сочетание предложений - IF NOT EXISTSи- EXECUTEдолжно поддерживаться, но в грамматике отсутствовало соответствующее правило.
- Использование прав корректного пользователя при выполнении вложенных - SELECTв выражениях политик защиты на уровне строк (Дин Рашид)- Ранее при обращении через представление к таблице с политикой RLS такие проверки могли осуществляться от имени пользователя, выполняющего запрос к представлению, а не от имени владельца представления, как должно быть. 
- Теперь при значении - xmlпараметра- xmloptionXML-документы считаются допустимыми значениями типа- xmlсогласно требованию, появившемуся в стандарте SQL:2006 (Чепмен Флэк)- Ранее PostgreSQL следовал определению стандарта SQL:2003, в котором это не допускалось. Но это создавало серьёзную проблему при выгрузке/восстановлении данных: ни одно из значений - xmloptionне позволяло принять все допустимые XML-данные. В связи с этим решено перейти к определению 2006.- Также модифицирована утилита pg_dump, чтобы при восстановлении данных выполнялась команда - SET xmloption = content. Это гарантирует, что выгрузка/восстановление сработает, даже если в данных преобладает вариант- document.
- Улучшение выполняемых при запуске сервера проверок на предмет использования ранее созданного сегмента общей памяти (Ной Миш) - Теперь главный процесс (postmaster) будет более надёжно определять активные процессы, оставшиеся от предыдущего воплощения сервера, даже в случае удаления файла - postmaster.pid.
- Исключение транзакций параллельных исполнителей из числа отдельных транзакций. 
- Устранение несовместимости записей GIN-индекса в WAL (Александр Коротков) - Исправление, вошедшее в февральский корректирующий выпуск, не учитывало все тонкости обратной совместимости. Ведущий сервер этого выпуска формировал в WAL такие записи об удалении страниц GIN, которые не мог корректно воспринять ведомый более старой версии. 
- Допущение кодов ошибок - EINVALи- ENOSYSв результатах функций- fsyncи- sync_file_rangeтам, где это приемлемо (Томас Манро, Джеймс Сьюэлл)- Предыдущее изменение, приводящее к панической остановке при ошибках файловой синхронизации, оказалось излишне параноидальным в ряде случаев, где сбой предсказуем и по сути означает «операция не поддерживается». 
- Устранение ошибок планировщика «failed to build any - N-way joins» (не удалось построить никакие- N-сторонние соединения) с подзапросами LATERAL снаружи полных внешних соединений (Том Лейн)
- Проверка прав корректного пользователя при применении правил, позволяющих негерметичным операторам обращаться к данным - pg_statistic(Дин Рашид)- Когда пользователь обращается к нижележащей таблице через представление, решение о возможности применения негерметичных операторов к статистическим данным таблицы должно приниматься с учётом прав не этого пользователя, а владельца представления. Таким образом, правила планировщика по определению видимости данных приводятся в соответствие с правилами исполнителя, что позволит избежать неоправданно невыгодных планов. 
- Ускорение планирования запросов со множеством условий равенства и множеством возможно связанных с ними ограничений внешнего ключа (Дэвид Роули) 
- Оптимизация неэффективных операций сложности O(N^2) при отмене транзакции, создавшей множество таблиц (Томаш Вондра) 
- Устранение условий гонки при управлении динамической общей памятью (Томас Манро) - В этих условиях могли возникать ошибки «dsa_area could not attach to segment» (не удалось подключить dsa_area к сегменту) или «cannot unpin a segment that is not pinned» (нельзя открепить сегмент, который не закреплён). 
- Устранение условий гонки, при которых сервер горячего резерва мог не отключиться, получив запрос на постепенное отключение (Том Лейн) 
- Устранение возможности краха при получении в параметрах - pg_identify_object_as_address()неправильных данных (Альваро Эррера)
- Улучшение правил проверки паролей, зашифрованных алгоритмами SCRAM-SHA-256 и MD5 (Джонатан С. Кац) - Строка пароля с определёнными начальными символами могла по ошибке приниматься за строку, закодированную в формате SCRAM-SHA-256 или MD5. Такой пароль можно было установить, но нельзя было использовать. 
- Исправление обработки значений - lc_time, подразумевающих кодировку, отличающуюся от кодировки базы (Хуан Хосе Сантамария Флеча, Том Лейн)- С локализованными названиями дней или месяцев, включающими не ASCII-символы, в таких локалях ранее выдавались неожиданные ошибки или некорректные строки. 
- Исправление ошибочных проверок - operator_precedence_warningс унарным оператором «минус» (Рикард Фалькеборн)
- Недопущение - NaNв качестве значения серверных параметров, принимающих числа с плавающей точкой (Том Лейн)
- Реорганизация работы - REINDEXдля предотвращения сбоев проверочных утверждений при переиндексировании отдельных индексов- pg_class(Андрес Фройнд, Том Лейн)
- Исправление проверочных утверждений в планировщике при обработке параметризованных фиктивных путей (Том Лейн) 
- Добавление нужной функции проверки в результат, выдаваемый функцией - SnapBuildInitialSnapshot()(Антонин Хоуска)- Для кода ядра это не важно, но важно для некоторых расширений. 
- Устранение периодических ошибок «could not reattach to shared memory» (не удалось переподключиться к общей памяти) при запуске сеансов в Windows (Ной Миш) - Невыявленным ранее источником таких проблем было создание стеков потоков в пуле потоков по умолчанию. Теперь такие стеки размещаются в другой области памяти. 
- Исправлена обработка ошибок при сканировании каталога в Windows (Константин Книжник) - Такие ошибки, как отсутствие прав для чтения каталога, не обнаруживались и не выдавались корректно; вместо этого поведение кода было таким же, как и с пустым каталогом. 
- Исправление грамматических дефектов в ecpg (Том Лейн) - Из-за пропущенной точки с запятой конструкция - SET(но не- переменная= DEFAULT- SET) в программах ecpg обрабатывалась некорректно, и в результате получался синтаксически некорректный код, не воспринимаемый сервером. Кроме того, в командах- переменнаяTO DEFAULT- DROP TYPEи- DROP DOMAIN, в которых перечислялось несколько имён типов, фактически обрабатывалось только первое имя.
- Согласование синтаксиса - CREATE TABLE ASв ecpg с принятым на стороне сервера (Дайсукэ Хигути)
- Ликвидация возможности переполнения буфера при обработке в ecpg имён включаемых файлов (Лю Хуайлин, Фей Ву) 
- Предупреждение краха в - contrib/vacuumloпри ошибке в- lo_unlink()(Том Лейн)
- Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией 2019a (Том Лейн) - При этом устранён небольшой дефект в zic, в результате которого выдавались данные о некорректном переходе в 2440 г. для часового пояса - Africa/Casablanca, и добавлена поддержка нового параметра zic- -r.
- Обновление данных часовых поясов до версии tzdata 2019a, включающее изменение правил перехода на летнее время в Палестине и Метлакатле, а также корректировку исторических данных для Израиля. - Часовой пояс - Etc/UCTтеперь является ссылкой на- Etc/UTC(добавленной для обратной совместимости), а не отдельным поясом, генерирующем аббревиатуру- UCT, которая теперь, как правило, просто опечатка. PostgreSQL по-прежнему принимает на вход такую аббревиатуру, но уже не выдаёт её.