E.1. Выпуск 18.1 #
Дата выпуска: 2025-11-13
В этот выпуск вошли различные исправления, внесённые после версии 18.0. За информацией о нововведениях версии 18 обратитесь к Разделу E.2.
E.1.1. Миграция на версию 18.1 #
Если используется версия 18.X, выгрузка/восстановление базы не требуется.
E.1.2. Изменения #
Проверка прав
CREATEдля схемы при выполнении командыCREATE STATISTICS(Йелте Феннема-Нио) §Раньше из-за отсутствия такой проверки владельцы таблиц могли создавать объекты статистики в любой схеме, что могло приводить к неожиданным конфликтам с именами.
Проект PostgreSQL благодарит Йелта Феннема-Нио за сообщение об этой проблеме. (CVE-2025-12817)
Предотвращение целочисленного переполнения в libpq при вычислении требуемого объёма памяти (Джейкоб Чемпион) §
При вычислении объёма памяти, который необходимо выделить, некоторые функции libpq не учитывали все тонкости. Если на вход передавался значительный объём данных, могло возникнуть целочисленное переполнение. В результате выделялся недостаточный объём, и запись выполнялась за пределами буфера.
Проект PostgreSQL благодарит Алексея Соловьёва из Positive Technologies за сообщение об этой проблеме. (CVE-2025-12818)
Предотвращение ошибок «unrecognized node type» (нераспознанный тип узла), возникавших при наличии предложения
DEFAULTс выражениемCOLLATEв функции SQL/JSON, напримерJSON_VALUE(Цзянь Хи) § §Недопущение некорректных оптимизаций предложений
HAVINGбез переменных при применении наборов группирования (Ричард Гуо) § §Избегание параллелизма в правых неполных соединениях по хешу (Ричард Гуо) §
Параллелизм не обеспечивал надёжность, поскольку при обновлении общей хеш-таблицы соединения возникало условие гонки.
Устранение возможности деления на ноль при создании упорядоченных планов Append (Ричард Гуо) §
Эта возможность могла привести к некорректному выбору наиболее выгодного пути или к сбою проверочного утверждения в отладочных сборках.
Устранение сбоя планировщика при использовании типов индексов, которые поддерживают упорядоченный доступ, но не поддерживают сканирование только индекса (Максим Схуманс) §
В результате этого сбоя возникали ошибки типа «no data returned for index-only scan» (нет данных для сканирования только индекса). Проблема не возникала со встроенными типами индексов, но она коснулась некоторых расширений.
Удаление ошибочного проверочного утверждения при очистке индексов btree (Питер Гейган) §
Предупреждение возможных сбоев из-за нехватки памяти или «invalid memory alloc request size» (недопустимый запрошенный размер памяти) при параллельном построении индексов GIN (Томаш Вондра) §
Предоставление снимка для выражений индексов в ходе автоматического расчёта сводки для индексов BRIN, если это необходимо (Альваро Эррера) § §
Раньше автоматический расчёт сводки для таких индексов завершался ошибкой и оставлял после себя кортежи-местозаполнители, что со временем приводило к раздуванию индекса.
Устранение угрозы целочисленного переполнения при сканировании индексов BRIN, если количество страниц в таблице приближается к 232 (Сунил С) §
Эта ошибка могла привести к бесконечному циклу сканирования или сканированию ненужных страниц таблицы.
Исправление некорректного дополнения нулями хранимых значений в коде кортежей, обработанных JIT (Дэвид Роули) §
Когда JIT-обработка не использовалась, корректно применялось расширение знака, что приводило к разному представлению небольших целочисленных типов данных. В большинстве случаев это несоответствие не проявлялось, но при использовании узлов плана Memoize фиксировались ошибки «could not find memoization table entry» (не удалось найти записи в таблице с мемоизацией). Были возможны и другие проявления.
Устранение редкого случая сбоя при обработке хешированных запросов с
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(Фудзии Масао) §Если при воспроизведении WAL на любом резервном сервере LSN переставал увеличиваться, обновление столбцов
write_lagиflush_lagпрекращалось.Устранение дублирования сообщений о некорректных значениях параметра
primary_slot_nameв журнале (Фудзии Масао) §Устранение сбоев при указании в
synchronized_standby_slotsнесуществующих слотов репликации (Шлок Кьял) §Удаление незаконченного файла состояния слота после сбоя записи состояния слота репликации на диск (Микаэль Пакье) §
Раньше после сбоя, например при нехватке места, временный файл
state.tmpне удалялся. Это вызывало проблемы, поскольку все последующие попытки записать состояние блокировались, что требовало ручной очистки.Исправление неправильной обработки сигналов об истечении времени ожидания блокировки параллельными рабочими процессами в ходе логической репликации (Хайато Курода) §
Один и тот же номер сигнала использовался при остановке рабочего процесса и при истечении времени ожидания блокировки, что вызывало путаницу.
Предотвращение нежелательного выключения приёмника WAL при переключении с потоковой передачи на архивацию источника WAL (Сюнэн Чжоу) §
Когда линия времени меняется, в ожидании новой начальной точки потоковой передачи приёмник WAL резервного сервера должен продолжать работу. Раньше он постоянно выключался и сразу снова запускался, что могло привести к путанице в отслеживании статуса.
Исправлена проблема использования освобождённой памяти при кешировании информации о синхронизации отношений модулем логического декодирования pgoutput (Вигнеш Си, Масахико Савада) §
Ошибка в ходе логического декодирования могла приводить к сбоям последующих попыток логического декодирования в том же сеансе. Проблема возникала, только когда модуль pgoutput вызывался с помощью SQL-функций.
Предотвращение ненужного аннулирования слотов логической репликации (Бертран Друво) §
Возвращение исключения в правило сортировки
Cпри установке локали (Джефф Девис) §Исключение позволяет устранить регрессию доступа к общим каталогам на раннем этапе запуска обслуживающего процесса до того, как выбрана база данных. Проблема не затрагивала код ядра PostgreSQL, но вызывала сбои некоторых расширений.
Исправление ошибочного вывода сообщений об ошибках при проверке наличия у пользователя прав администратора Windows (Брайан Грин) §
Сообщение об ошибке или не выводилось совсем, или содержало мусор. Жалоб на эту проблему не поступало, что указывает на то, что ошибка этих системных вызовов происходила крайне редко.
Устранение сбоя при попытке протестировать PostgreSQL, используя некоторые параметры libsanitizer (Эммануэль Сиби, Джейкоб Чемпион) §
Устранение ложных предупреждений при проверке контекстов памяти в отладочных сборках 64-битной Windows (Дэвид Роули) §
Корректная обработка
GROUP BY DISTINCTв операторах присваивания PL/pgSQL (Том Лейн) §Анализатор не распознавал параметр
DISTINCT, поэтому команда выполнялась как будто сGROUP BY.Устранение утечки памяти при обработке ошибки SQL в PL/Python (Том Лейн)
Устранена утечка памяти в течение всего сеанса, появившаяся в предыдущих корректирующих выпусках.
Исправление поведения libpq в отношении обработки ошибок в Windows, связанных с сокетами, в логике GSSAPI (Нин У, Том Лейн) §
Код для шифрования/дешифрования передаваемых данных при использовании GSSAPI не распознавал условия ошибок в сокете соединения, поскольку Windows сообщает о таких ошибках не так, как другие ОС. Это приводило к невозможности установить такие соединения в Windows.
Исправление выгрузки ненаследуемых ограничений NOT NULL, установленных для наследуемых столбцов таблицы (Дилип Кумар) §
Утилита pg_dump не сохраняла такие ограничения при выгрузке с сервера до версии 18.
Исправление сортировки ограничений внешних ключей утилитой pg_dump (Альваро Эррера) §
Исправление обеспечивает определённый порядок для этих объектов баз данных, что уже было сделано для других типов объектов.
Исправление различных ошибок в логике сжатия данных pg_dump и pg_restore (Даниэль Густафссон, Том Лейн) § § §
В некоторых местах проверка пропускалась или выполнялась неправильно. На компьютерах с порядком байт от старшего возникали вопросы переносимости. Сообщений об этих проблемах не поступало, так как код используется только для чтения сжатых файлов с перечнем больших объектов в рамках выгрузок каталогов. pg_dump не создаёт таких выгрузок; проблемы бы возникли в случае сжатия файла с перечнем больших объектов вручную, что возможно, но используется редко.
Исправление поведения 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 полностью нулевые страницы уже рассматривались как свободное пространство, но для хеш-индексов и индексов GIST выводилась ошибка, что было сильно неудобно для пользователей. Также для всех трёх типов индексов повреждённые страницы не вызывают ошибку, а пропускаются.
Усиление барьеров для чтения и записи компилятором Clang (Томас Манро)
Предполагалось, что
__atomic_thread_fence()создаёт достаточный барьер, чтобы компилятор C не менял порядок доступа к памяти, однако оказалось, что это ограничение не работало для компилятора Clang, позволяя ему генерировать неправильный код, как минимум, для процессоров RISC-V, MIPS и LoongArch. Чтобы это исправить, были добавлены явные барьеры для компилятора.Исправлена инфраструктура сборки PGXS, чтобы поддержать сборку файлов
poдля расширений с помощью NLS (Рё Мацумура) §