E.14. Релиз 15.4#

E.14. Релиз 15.4

E.14. Релиз 15.4

Дата релиза:  2023-08-10

Этот релиз содержит ряд исправлений версии 15.3. Для информации о новых функциях в основном релизе 15, смотрите Раздел E.18.

E.14.1. Миграция на Версию 15.4

Не требуется резервное копирование/восстановление для тех, кто использует версию 15.X.

Однако, если вы используете индексы BRIN, может быть целесообразно их переиндексировать; см. третью запись в журнале изменений ниже.

Также, если вы обновляетесь с версии раньше, чем 15.1, смотрите Раздел E.17.

E.14.2. Изменения

  • Настроен запрет подстановки имени схемы или владельца в скрипт расширения, если имя содержит кавычку, обратную косую черту или знак доллара (Noah Misch)

    Это ограничение защищает от опасностей SQL-инъекций для доверенных расширений.

    Проект PostgreSQL благодарит Мика Гейтса (Micah Gates), Валери Вулард (Valerie Woolard), Тима Кэри-Смита (Tim Carey-Smith) и Кристофа Берга (Christoph Berg) за сообщение об этой проблеме. (CVE-2023-39417)

  • Исправлена команда MERGE для правильного применения политик безопасности строк (Dean Rasheed)

    Когда MERGE выполняет действие UPDATE, он должен применять любые политики RLS UPDATE или SELECT, определенные на целевой таблице, для согласованности с тем, как работает обычный UPDATE с предложением WHERE. Вместо этого он применял политики RLS INSERT для обоих действий INSERT и UPDATE.

    Кроме того, когда MERGE выполняет действие DO NOTHING, он применяет политики RLS DELETE целевой таблицы к существующим строкам, даже если эти строки не удаляются. Хотя это не проблема безопасности, это может привести к нежелательным ошибкам.

    Проект PostgreSQL благодарит Дина Рашида (Dean Rasheed) за сообщение об этой проблеме. (CVE-2023-39418)

  • Исправлена путаницу между пустыми (без строк) диапазонами и полностью NULL диапазонами в BRIN индексах, а также неправильное объединение полностью NULL сводок (Томас Вондра)

    Каждое из этих упущений могло привести к упущению того факта, что диапазон индекса BRIN содержит какие-либо значения NULL, потенциально позволяя последующим запросам, которые должны возвращать значения NULL, пропустить это.

    Этот исправление само по себе не исправит некорректные записи BRIN. Рекомендуется REINDEX для всех индексов BRIN, которые могут использоваться для поиска null-значений.

  • Устранены случаи, когда поврежденные базы данных остаются в системе после прерывания команды DROP DATABASE (Andres Freund)

    Если DROP DATABASE была прервана после того, как уже начались необратимые шаги, целевая база данных оставалась доступной (потому что удаление строки pg_database откатывалось), но ее содержимое было бы повреждено. Исправьте, отметив базу данных как недоступную, прежде чем мы начнем выполнять необратимые операции. Сбой после этого оставит базу данных частично присутствующей, но с ней ничего нельзя сделать, кроме как выдать еще одну команду DROP DATABASE.

  • Настроена проверка правильной пометки партицированных индексов как действительных или нет при создании (Michael Paquier)

    Если новый партицированный индекс соответствует существующему, но недействительному индексу на одной из секций, партицированный индекс может быть помечен как действительный преждевременно. Это может привести к неправильной работе или сбоям утверждения в последующих запросах к партицированной таблице.

  • Настроено игнорирование недействительных дочерних индексов при сопоставлении партицированных индексов с дочерними индексами во время ALTER TABLE ATTACH PARTITION (Michael Paquier)

    Такой индекс теперь будет игнорироваться, и вместо него будет создан новый дочерний индекс.

  • Исправлен возможной сбой при пометке партицированного индекса как действительного после того, как все его секции были подключены (Michael Paquier)

    Обновление записи индекса pg_index может использовать устаревшие данные для других столбцов. Одним из зарегистрированных симптомов является ошибка попытка обновить невидимый кортеж.

  • Команда ALTER EXTENSION SET SCHEMA исправлена так, чтобы выдавалось предупреждение, если расширение содержит какие-либо объекты за пределами схемы расширения (Michael Paquier, Heikki Linnakangas)

    Ошибка, если расширение содержит объекты в нескольких схемах, всегда предполагалась; но проверка была неправильно закодирована, поэтому она могла не обнаруживать некоторые случаи, что приводило к неожиданному поведению.

  • Исправлено отслеживание зависимостей методов доступа к таблицам (Michael Paquier)

    ALTER TABLE ... SET ACCESS METHOD не удалось обновить соответствующие записи в pg_depend при изменении метода доступа к таблице. При использовании не встроенных методов доступа, это создает риск, что метод доступа может быть удален, хотя таблицы все еще зависят от него. Этот исправление корректирует логику в ALTER TABLE, но оно не будет корректировать любые уже отсутствующие записи в pg_depend.

  • Не используйте частичные уникальные индексы для доказательства уникальности в планировщике (David Rowley)

    Это могло привести к неверным планам, поскольку предполагаемая уникальность строк, считанных из таблицы, может не соблюдаться, если индекс в вопросе не используется для сканирования таблицы.

  • Устранена мемоизация поздних соединений с изменчивыми условиями соединения (Richard Guo)

    Применение Memoize к подплану, содержащему изменчивые условия фильтрации, вероятно, приведет к неверным ответам. Проверка, чтобы избежать этого, пропустила некоторые случаи, которые могут возникнуть при использовании LATERAL.

  • Устранены создания некорректных планов для внешних соединений с псевдоконстантными соединительными предложениями (Etsuro Fujita)

    В настоящее время планировщик не поддерживает присоединение псевдоконстантных предложений соединения к удаленному соединению, поэтому отключите создание удаленных соединений в таких случаях. (Более лучшее решение потребует изменений в структурах данных планировщика, нарушающих ABI, поэтому оно должно ждать будущего крупного релиза.)

  • Настроена правильная обработка подзапросов SELECT в выражений политики RLS и представлениях секретности при расширении действий правил (Tom Lane)

  • Устранены условия гонки при обнаружении конфликтов для режима изоляции SERIALIZABLE (Thomas Munro)

    Конфликты могут быть прне указаны при использовании сканирования кучи битовых карт, при использовании GIN-индексов, и при рассмотрении изначально пустого btree-индекса. Все эти случаи могут привести к сбоям сериализуемости из-за неправильного разрешения конфликтующих транзакций на фиксацию.

  • Исправлено некорректное поведение проверок EvalPlanQual с наследуемыми или партицированными целевыми таблицами (Tom Lane)

    Этот просмотр мог привести к выполнению действий обновления или удаления в режиме изоляции READ COMMITTED, когда они должны были быть прне указаны из-за конфликтующего параллельного обновления.

  • Исправлены соединения по хешу с внутренним хеш-ключом, который содержит Params, из внешнего вложенного цикла (Tom Lane)

    При повторном сканировании соединения после изменения значений таких Params, мы должны перестроить хеш-таблицу, но забыли это сделать. Это может привести к пропуску строк вывода соединения.

  • Исправлены периодические сбои при попытке обновить поле составного столбца (Tom Lane)

    Если общее значение составного столбца достаточно широкое, чтобы потребовать внешнего toasting, то неудачно запланированная очистка кэша может вызвать ошибки или сбои сервера.

  • Устранены утечек памяти на протяжении всего запроса в некоторых UPDATE запросах с триггерами (Томас Вондра)

  • Устранены утечек памяти в течение жизни запроса, когда план Incremental Sort node повторно сканируется (James Coleman, Laurenz Albe, Tom Lane)

  • Настроен прием дробных секунд во входных данных для метода datetime() jsonpath (Tom Lane)

  • Устранены сбои из-за переполнения стека при очень сложных текстовых поисковых шаблонах (Tom Lane)

  • В pg_hba.conf и pg_ident.conf разрешены компоненты длиной до 10240 байт (Tom Lane)

    Было обнаружено, что предыдущий лимит в 256 байт недостаточен для некоторых сценариев использования.

  • Настроена проверка всех существующих заполнителей на совпадения, когда расширение объявляет свой префикс GUC как зарезервированный (Karina Litskevich, Ekaterina Sokolova)

    Неправильная логика цикла может привести к пропуску некоторых записей.

  • Исправлена неправильная обработка нехватки памяти в C++ (Heikki Linnakangas)

    Если используется JIT, исчерпание памяти при вызове C++ new приведет к фатальной ошибке PostgreSQL, вместо ожидаемого исключения C++.

  • Исправлены редкие сбои из-за нулевого указателя в plancache.c (Tom Lane)

  • Устранены утечки записи статистики для подписки при ее удалении (Masahiko Sawada)

  • Устранены потери возможно полезных сегментов общей памяти, когда освобождение страницы приводит к объединению диапазонов свободного пространства (Донгминг Лю).

    Настроена проверка перемещения сегмента в соответствующий контейнер под новый объем свободного пространства, чтобы он был найден при последующих поисках.

  • Настроено продолжение работы команды VACUUM после обнаружения определенных типов повреждения b-tree индекса (Peter Geoghegan)

    Если обнаружена недействительная ссылка на страницу-брата, зарегистрируйте проблему и продолжайте, вместо выбрасывания ошибки, как раньше. Ничто, кроме REINDEX, не исправит сломанный индекс, но предотвращение завершения VACUUM до того, как это будет сделано, рискует сделать дела гораздо хуже.

  • Настроена проверка освобождения WrapLimitsVacuumLock после того, как VACUUM обнаруживает недопустимые данные в pg_database.datfrozenxid или pg_database.datminmxid (Andres Freund)

    Неудача в освобождении этой блокировки впоследствии может привести к тупиковой ситуации, хотя блокировка будет очищена, если сессия завершится или столкнется с какой-либо другой ошибкой.

  • Устранено двойное воспроизведение подготовленных транзакций во время восстановления после сбоя (suyu.cmj, Michael Paquier)

    После сбоя во время контрольной точки, когда некоторые данные состояния двухфазной транзакции уже были выгружены на диск этой контрольной точкой, восстановление после сбоя может попытаться повторно воспроизвести подготовленную(ые) транзакцию(ии) дважды, что приведет к фатальной ошибке, такой как блокировка уже установлена в процессе запуска.

  • Гарантировано выполнение fsync на вновь созданных, но еще пустых таблицах на следующей контрольной точке (Heikki Linnakangas)

    Без этого, если произойдет сбой операционной системы, вызвавший исчезновение пустого файла, последующие операции с таблицей могут завершиться с ошибками не удалось открыть файл.

  • Гарантирована регистрация создания начальной ветки незарегистрированного индекса в журнале WAL (Heikki Linnakangas)

    Хотя основной данные не зарегистрированного индекса не регистрируются в WAL, его начальная ветвь должна быть зарегистрирована, чтобы гарантировать, что у нас есть согласованное состояние для восстановления индекса после сбоя. Этот шаг был прне указан, если начальная ветвь не содержит данных, что не используется ни одним стандартным индексом AM; но, возможно, некоторые расширения работают таким образом.

  • Подавлены ложные ошибки missing contrecord (Thomas Munro)

    Обрабатывайте этот случай как обычный конец WAL, чтобы избежать регистрации неточных жалоб от pg_waldump и walsender.

  • Исправлено чрезмерно строгое утверждение в коде jsonpath (David Rowley)

    Это утверждение не выполнялось, если запрос применял оператор .type() к результату like_regex. В сборках без проверки утверждений ошибок не было.

  • Устранен сбой утверждения при обработке пустого оператора через расширенный протокол запроса в уже прерванной транзакции (Tom Lane)

  • Устранен сбой утверждения, когда настройка stats_fetch_consistency изменяется внутри транзакции (Kyotaro Horiguchi)

  • Исправлена функция difference() в contrib/fuzzystrmatch Soundex для разумной обработки пустого ввода (Alexander Lakhin, Tom Lane)

    Входная строка, не содержащая буквенных символов, приводила к непредсказуемому выводу.

  • Ужесточение проверки пробелов во входных данных contrib/hstore (Evan Jones)

    В некоторых случаях, символы могут быть неверно распознаны как пробелы и, следовательно, отброшены.

  • Запрещен ввод массивов слишком большого размера с помощью contrib/intarray's gist__int_ops индексной операционной класса (Ankit Kumar Pandey, Alexander Lakhin)

    Ранее этот код выдавал NOTICE, но продолжал работу, создавая недействительную запись индекса, которая представляет риск сбоев при чтении индекса.

  • Устранена излишняя двойная декомпрессия записей GiST индекса в contrib/intarray (Konstantin Knizhnik, Matthias van de Meent, Tom Lane

  • Исправить функцию gist_page_items() в contrib/pageinspect для работы, когда присутствуют включенные столбцы индекса (Alexander Lakhin, Michael Paquier)

    Ранее, если в индексе были включены столбцы, gist_page_items() не мог отобразить эти значения на листовых страницах индекса, или вовсе вылетал на нелистовых страницах.

  • В psql, настроено игнорирование переменной окружения PSQL_WATCH_PAGER когда stdin/stdout не являются терминалом (Tom Lane)

    Это соответствует обработке PSQL_PAGER в командах, отличных от \watch.

  • В pg_dump настроена правильная обработка новых функций SQL-языка, тела которых требуют зависимостей от уникальных индексов во время разбора (Tom Lane)

    Такие случаи могут возникнуть из-за предложений GROUP BY и ON CONFLICT, например. Функция затем должна быть отложена до момента после уникального индекса в выгрузке данных, но pg_dump этого не делал, а вместо этого выводил предупреждение о не удалось разрешить цикл зависимостей.

  • Улучшено отображение pg_dump деталей о проблемах с циклом зависимостей (Tom Lane)

  • Устранение сбоя в pgbench с пустым конвейером и подготовленным режимом (Álvaro Herrera)

  • Настроена проверка обновления pg_index.indisreplidentв записях кэша структуры (Shruthi Gowda)

    Это значение может быть устаревшим в некоторых случаях. Нет основного кода, который полагается на копию кэша отношений, поэтому это только скрытый баг, насколько касается самого Postgres; но могут быть расширения, для которых это активный баг.

  • Исправлен скрипт make_etags для работы с не-Exuberant ctags (Masahiko Sawada)