E.6. Выпуск 18.1#

E.6. Выпуск 18.1

E.6. Выпуск 18.1 #

Дата выпуска:  2025-11-13

В данный выпуск вошли различные исправления по сравнению с версией 18.0. Сведения о нововведениях мажорного выпуска 18 приведены в Раздел E.7.

E.6.1. Миграция на версию 18.1 #

При использовании версии 18.X выгрузка и восстановление базы данных не требуются.

E.6.2. Изменения #

  • Контроль наличия прав CREATE на схему при выполнении команды CREATE STATISTICS (Йелте Феннема-Нио) §

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

    Проект Tantor SE признателен Йелте Феннема-Нио за сообщение об этой проблеме. (CVE-2025-12817)

  • Предотвращение целочисленного переполнения при расчёте размеров выделяемой памяти в libpq (Джейкоб Чемпион) §

    Ранее при вычислении объёма памяти, подлежащего выделению, отдельные функции libpq не учитывали все необходимые условия. При передаче значительных объёмов входных данных это могло приводить к целочисленному переполнению, в результате чего выделялся буфер недостаточного размера и запись выполнялась за его пределы.

    Проект Tantor SE признателен Алексею Соловьёву из Positive Technologies за сообщение об этой проблеме. (CVE-2025-12818)

  • Предотвращение ошибок unrecognized node type при обработке выражений COLLATE в предложении DEFAULT в рамках функций SQL/JSON, таких как JSON_VALUE (Цзянь Хи) § §

  • Исключение некорректных оптимизаций предложений HAVING, не содержащих переменных, при использовании наборов группирования (Ричард Гуо) § §

  • Исключение параллелизма в правых полу-соединениях по хешу (Ричард Гуо) §

    Такой вариант работы был ненадёжным из-за состояния гонки при обновлении общей хеш-таблицы соединения.

  • Исключение деления на ноль при формировании планов с упорядоченным добавлением (Ричард Гуо) §

    Эта ошибка могла приводить к некорректному выбору наиболее дешёвого пути либо к сбою проверки утверждений в отладочных сборках.

  • Корректировка работы планировщика для типов индексов с упорядоченным доступом без поддержки сканирования только по индексу (Максим Схуманс) §

    Указанное поведение могло приводить к ошибкам с сообщением нет данных, возвращённых при сканировании только по индексу. При работе со встроенными типами индексов такие ситуации не возникали, тогда как в ряде расширений они могли наблюдаться.

  • Исключение некорректной проверки assert в процессе очистки индексов btree (Питер Геогеган) §

  • Исключение ошибок, связанных с нехваткой памяти и сообщением некорректный размер запроса на выделение памяти, при параллельной сборке GIN-индекса (Томаш Вондра) §

  • Обеспечение предоставления снимка для выражений индекса при автоматическом суммировании BRIN (Альваро Эррера) § §

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

  • Исключение целочисленного переполнения при сканировании BRIN-индексов для таблиц с количеством страниц, близким к 232 (Сунил С) §

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

  • Корректная обработка нулевого расширения сохранённых значений в JIT-сгенерированном коде деформации кортежей (Дэвид Роули) §

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

  • Устранение редких сбоев при обработке хешированных запросов с использованием GROUPING SETS (Дэвид Роули) §

  • Корректировка логики выбора размера хеш-таблицы при выполнении хеш-соединений (Томаш Вондра) §

    В отдельных случаях хеш-соединения могли использовать больший объём памяти, чем ожидалось, либо не обеспечивалось её эффективное распределение.

  • Корректировка логики поиска отношений в функциях управления статистикой (Натан Боссарт) § §

    В функциях pg_restore_relation_stats(), pg_clear_relation_stats(), pg_restore_attribute_stats() и pg_clear_attribute_stats() проверка привилегий выполняется до захвата блокировки на целевом отношении, а не после.

  • Корректировка логики кэширования информации о результирующих отношениях при работе триггеров (Дэвид Роули, Амит Ланготе) §

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

  • Устранение сбоев при выполнении повторных проверок EvalPlanQual на секционированных таблицах (Дэвид Роули, Амит Ланготе) §

  • Корректная обработка EvalPlanQual для внешних и пользовательских соединений при отсутствии альтернативного локального плана EPQ (Масахико Савада, Эцуро Фуджита) §

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

  • Исключение дублирования ограничений хеш-секционирования при выполнении DETACH CONCURRENTLY (Хайян Ли) §

    Ранее команда ALTER TABLE DETACH PARTITION CONCURRENTLY добавляла копию ограничения секционирования к уже отсоединённому разделу. Такое поведение являлось некорректным, поскольку обычный (неконкурентный) DETACH не создаёт подобных ограничений, а при хеш-секционировании выражение ограничения содержит ссылки на OID родительской таблицы. Это могло приводить к проблемам при выполнении операций дампа и восстановления, а также в случаях удаления родительской таблицы после DETACH. Начиная с версии 19 такие ограничения больше не создаются. В поддерживаемых ветках, для снижения риска побочных эффектов, добавление копии ограничения пропускается только для хеш-секционирования.

  • Запрет использования сгенерированных столбцов в ключах секционирования (Цзянь Хи, Ашутош Бапат) §

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

  • Запрет использования сгенерированных столбцов в предложениях COPY ... FROM ... WHERE (Питер Айзенштраут, Цзянь Хи) §

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

  • Запрет назначения столбца идентичности при наличии недействительного ограничения NOT NULL (Цзянь Хи) §

    Для столбцов идентичности требуется наличие действующего ограничения NOT NULL, однако ранее проверка не учитывала данный пограничный случай.

  • Исключение потенциальной ошибки использования освобождённой памяти при параллельной очистке (Кевин Омен Аниш) §

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

  • Корректная проверка видимости статистических объектов во временной схеме pg_temp (Ной Миш) §

    Статистические объекты, размещённые во временной схеме, требуют явного указания схемы в имени. Однако функция pg_statistics_obj_is_visible() не учитывала это обстоятельство и могла возвращать значение true независимо от фактической видимости. В результате функции, такие как pg_describe_object(), не всегда добавляли имя схемы к имени объекта, как предполагалось.

  • Устранение небольшой утечки памяти при воспроизведении WAL в процессе создания базы данных (Натан Боссарт) §

  • Корректное отображение задержек репликации в представлении pg_stat_replication (Фудзии Масао) §

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

  • Исключение дублирования сообщений в журнале при недопустимых настройках параметра primary_slot_name (Фудзии Масао) §

  • Предотвращение сбоев при указании несуществующих слотов репликации в параметре synchronized_standby_slots (Шлок Кьял) §

  • Корректная обработка временных файлов состояния репликационного слота при ошибках записи на диск (Микаэль Пакье) §

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

  • Корректная обработка сигналов тайм-аута блокировки в параллельных рабочих процессах применения логической репликации (Хайато Курода) §

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

  • Корректная работа получателя WAL при переключении с потокового источника на архивный (Сюнэн Чжоу) §

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

  • Исключение ошибки use-after-free в кеше синхронизации отношений плагина логического декодирования pgoutput (Вигнеш С, Масаихико Савада) §

    Исправлена ошибка, из-за которой сбой при логическом декодировании мог приводить к сбоям при последующих попытках логического декодирования в той же сессии. Данная ситуация возможна только при вызове pgoutput через SQL-функции.

  • Исключение ненужного аннулирования слотов логической репликации (Бертран Друво) §

  • Восстановление особого случая для сортировки C при настройке локали (Джефф Дэвис) §

    Указанное изменение устраняет регрессию в доступе к общим каталогам на раннем этапе запуска серверного процесса, до выбора базы данных. Для основного кода Tantor SE данная ситуация не являлась проблемой, однако могла приводить к некорректной работе отдельных расширений.

  • Исключение сбоев при тестировании Tantor SE с использованием отдельных опций libsanitizer (Эммануэль Сиби, Джейкоб Чемпион) §

  • Корректная обработка использования GROUP BY DISTINCT в операторах присваивания PL/pgSQL (Том Лейн) §

    Ранее парсер не распознавал применение опции DISTINCT в данном контексте, поэтому команда выполнялась так, как если бы использовался обычный GROUP BY.

  • Исключение утечки памяти при обработке ошибок SQL в PL/Python (Том Лейн) §

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

  • Корректное сохранение неунаследованных ограничений NOT NULL для столбцов унаследованных таблиц (Дилип Кумар) §

    При выгрузке с серверов версий до v18 утилита pg_dump не сохраняла такие ограничения.

  • Единообразная сортировка внешних ключей в pg_dump (Альваро Эррера) §

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

  • Корректировка логики сжатия данных в утилитах pg_dump и pg_restore (Даниэль Густафссон, Том Лейн) § § §

    В отдельных участках отсутствовала либо некорректно выполнялась проверка ошибок, а также выявлялись проблемы переносимости, проявляющиеся на системах с архитектурой big-endian. Эти недостатки оставались незамеченными, поскольку соответствующий код используется исключительно для чтения сжатых TOC-файлов в дампах формата каталога. Утилита pg_dump не создаёт такие дампы; подобная ситуация возможна только при ручном сжатии TOC-файла после создания дампа, что поддерживается, но встречается крайне редко.

  • Корректное завершение утилиты pgbench с ошибкой при выполнении операции COPY (Антонин Боннефой) §

    Утилита pgbench не предназначена для обработки данного сценария. Ранее его возникновение могло приводить к зацикливанию выполнения.

  • Корректная обработка сообщений об ошибках в pgbench при повторных сбоях (Юго Нагата) §

    При последовательном завершении с ошибкой двух вызовов PQgetResult pgbench мог формировать некорректное диагностическое сообщение.

  • Корректная проверка утверждений об ошибках в конвейерном режиме в pgbench (Юго Нагата) §

  • Устранение утечки памяти при работе с файлами в pg_combinebackup (Том Лейн) §

  • Обеспечение возможности отмены выполнения функций расширения contrib/pg_buffercache (Сатьянараяна Нарлапурам, Юйхан Цю) § §

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

  • Корректировка проверок привилегий при предварительной загрузке индексов в расширении contrib/pg_prewarm (Аюш Ватса, Натан Боссарт) § §

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

  • Исключение аварийного завершения работы расширения contrib/pg_stat_statements при совпадении позиций нескольких констант в тексте SQL-запроса (Сами Имсейх, Дмитрий Долгов) §

  • Повышение устойчивости расширения contrib/pgstattuple при обработке пустых и недопустимых страниц индекса (Нитин Мотиани) §

    Страницы, полностью заполненные нулями, рассматриваются как свободное пространство, а страницы, признанные недопустимыми при проверке размера специальной области, исключаются из обработки. Для btree-индексов такая логика применялась ранее, тогда как для индексов типов hash и gist подобные ситуации приводили к ошибкам. Во всех случаях реализовано игнорирование повреждённых страниц вместо генерации ошибок.

  • Ужесточение макросов барьеров чтения и записи для соответствия требованиям компилятора Clang (Томас Манро) §

    Использование __atomic_thread_fence() рассматривалось как достаточный барьер для предотвращения переупорядочивания обращений к памяти компилятором C, однако для Clang этого оказалось недостаточно. В ряде архитектур, включая RISC-V, MIPS и LoongArch, такое поведение могло приводить к генерации некорректного кода. Для устранения проблемы применены явные барьеры компилятора.

  • Расширение инфраструктуры сборки PGXS для поддержки сборки NLS po файлов для расширений (Рё Мацумура) §