E.1. Выпуск 15.13

Дата выпуска: 2025-05-08

В этот выпуск вошли различные исправления, внесённые после версии 15.12. За информацией о нововведениях версии 15 обратитесь к Разделу E.14.

E.1.1. Миграция на версию 15.13

Если используется версия 15.X, выгрузка/восстановление базы не требуется.

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

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

Если вы обновляете сервер с более ранней версии, чем 15.9, см. Раздел E.5.

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

  • Устранение выхода за границы буфера на один байт при проверке некорректно закодированных строк, которые якобы приведены в кодировке GB18030 (Ной Миш, Андрес Фройнд) §

    Если неполный многобайтовый символ появлялся за пределами памяти, на сервере и в использующих libpq приложениях с невысокой вероятностью мог возникать сбой из-за ошибки сегментации SIGSEGV. (CVE-2025-4207)

  • Исправление обработки ссылающихся на себя внешних ключей в секционированных таблицах (Альваро Эррера) §

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

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

  • Предотвращение потери данных во время слияния сжатых сводок индекса BRIN при помощи функции brin_bloom_union() (Томаш Вондра) §

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

    Эта ошибка присутствовала ещё с PostgreSQL 14, где появилась возможность использовать фильтры Блума в индексах BRIN. Однако это место кода тогда практически не задействовалось. Теперь в PostgreSQL 17 вероятность натолкнуться на эту ошибку существенно возросла, поскольку код используется при параллельном построении индексов.

  • Устранение непредвиденных ошибок «attribute has wrong type» (атрибут имеет неверный тип) в запросах UPDATE, DELETE и MERGE, при которых переменные «вся строка» таблицы ссылаются на представления или функции в предложении FROM (Том Лейн) § § §

  • Исправление слияния с секционированной таблицей при помощи команды MERGE с действиями DO NOTHING (Тендер Ван) §

    В некоторых случаях возникала ошибка «unknown action in MERGE WHEN clause» (неизвестное действие в предложении MERGE WHEN).

  • Устранение сбоя команды INSERT, который мог возникать, если у таблицы был столбец, определённый со свойством GENERATED, с типом данных домена и ограничения домена запрещали значения NULL (Цзянь Хи) §

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

  • Исправление обработки ссылок на имена внешних CTE внутри предложения WITH, присоединённого к команде INSERT/UPDATE/DELETE/MERGE, которая сама находится внутри предложения WITH (Том Лейн) §

    Анализатор запросов не выявлял недопустимые случаи рекурсивных запросов и не учитывал такие ссылки при сортировке CTE в корректном порядке выполнения.

  • Исправление вывода некорректных результатов конструкциями ARRAY(подзапрос) и ARRAY[выражение, ...] при передаче данных типа int2vector или oidvector (Том Лейн) §

    Это исправление восстанавливает поведение, которое демонстрировалось до версии PostgreSQL 9.5. Результат теперь снова выводится с типом int2vector[] или oidvector[].

  • Исправление возможных некорректных выводов ошибок о недействительных аффиксах во время разбора словарей Ispell (Джейкоб Брейзил) §

  • Исправление команды ALTER TABLE ADD COLUMN для корректной обработки типа данных домена со значением по умолчанию (Цзянь Хи, Том Лейн, Тендер Ван) §

    Если у доменного типа было значение по умолчанию, при добавлении столбца этого типа (без явного указания предложения DEFAULT) значение домена по умолчанию к существующим строкам не применялось. Вместо этого в новом столбце подставлялось значение NULL.

  • Исправление некорректного поведения при дублировании имён столбцов в действии ON DELETE SET DEFAULT или SET NULL ограничения внешнего ключа (Том Лейн) §

  • Улучшение текста сообщения об ошибке, которое выводится при попытках недопустимого изменения свойств ограничения внешнего ключа (Альваро Эррера) §

  • Исправление ошибки, возникавшей при сбросе флага relhassubclass временной таблицы, для которой указано предложение ON COMMIT DELETE ROWS (Ной Миш) §

  • Исправление ошибки планировщика при определении более одного хешируемого подвыражения ScalarArrayOpExpr внутри выражения верхнего уровня (Давид Гайер) §

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

  • Отключение оптимизации «пропуск выборки» в сканировании кучи по битовой карте (Маттиас ван де Меент) §

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

  • Устранение проблем производительности при запуске поиска по индексу GIN с большим числом поисковых ключей (Том Лейн, Винод Шридхаран) § §

    Поиск по индексируемым предложениям с большим числом поисковых ключей (например, jsonbcol ?| array[...] с десятками тысяч элементов массива) запускался через O(N2) времени. В течение этого временного промежутка его также нельзя было отменить.

  • Выявление недостающих опорных процедур в классе операторов индекса BRIN и вывод ошибки вместо сбоя (Альваро Эррера) §

  • Реагирование на прерывания (например, отмену запроса) во время ожидания асинхронных подпланов узла плана Append (Хейкки Линнакангас) §

    Ранее ничего не происходило, пока один из подпланов не был готов.

  • Устранение условий гонки при обработке параметра конфигурации synchronous_standby_names сразу после запуска сервера (Максим Мельников, Микаэль Пакье) §

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

  • Устранение сбоя функции pg_strtof() при передаче NULL в endptr (Александр Лахин, Том Лейн) §

  • Устранение сбоя при нехватке памяти в стеммере Snowball (Максим Коротков) §

  • Предотвращение слишком сильного продвижения значения catalog_xmin в «ускоренном» режиме логического декодирования (Хоу Чжицзе) §

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

  • Предотвращение потери данных при выполнении DDL-операций без сильной блокировки для таблиц, участвующих в логической репликации (Шлок Кьял, Хайато Курода) §

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

  • Запрет создания дубликата снимка при поиске по индексу во время логической репликации (Хейкки Линнакангас) § §

  • Исправление некорректной информации о контрольной точке в сообщении об ошибке, выводимом в случае неверного выбора линии времени для восстановления (Дэвид Стил) §

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

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

  • Удаление некорректного проверочного утверждения в функции pgstat_report_stat() (Микаэль Пакье) §

  • Исправление слишком строгого проверочного утверждения в функции gistFindCorrectParent() (Хейкки Линнакангас) §

  • Устранение сбоя проверочного утверждения, возникавшего в редких случаях на резервных серверах при перезапуске ведущего (Хейкки Линнакангас) §

  • Исправление ошибки «unexpected plan node type» (неожиданный тип узла плана) в PL/pgSQL при определении прокручиваемого курсора для простого запроса SELECT выражение (Андрей Лепихов) §

  • Запрет удаления отдельных секций индекса в режиме --clean утилиты pg_dump (Цзянь Хи) §

    Сервер не принимает такие команды DROP. Однако реальных последствий это не вызывает, поскольку секции всё равно удалятся при последующем удалении их родительских таблиц или секционированного индекса. Тем не менее выводимая ошибка о попытке удаления мешала во время восстановления в режиме --single-transaction.

  • Запрет генерирования недействительных команд GRANT для ролей утилитой pg_dumpall, если в каталоге pg_auth_members содержатся недействительные OID ролей (Том Лейн) §

    Вместо этого теперь выводится предупреждение, и вхождение каталога пропускается. Такое решение позволяет лучше справляться с повреждением каталога, которое могло возникать в ветвях старых версий в результате условий гонки между командами GRANT и DROP ROLE.

  • Использование корректной функции для высвобождения памяти, выделенной libpq, для утилит pg_amcheck и pg_upgrade (Микаэль Пакье, Ранье Вилела) §

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

  • Возможность прерывать запросы contrib/dblink операцией отмены запроса (Ной Миш) § §

    Это изменение также переносит правки кода из PostgreSQL 17. Оно предотвращает возможные зависания команд CREATE DATABASE и DROP DATABASE из-за ошибок при определении взаимоблокировок.

  • Устранение сбоя при передаче повреждённых входных данных функции heap_page_items() модуля contrib/pageinspect (Дмитрий Коваленко) §

  • Устранение сбоя проверочного утверждения в функции pg_freespace() модуля contrib/pg_freespacemap (Тендер Ван) §

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

  • Исправление ошибки сборки в macOS 15.4 (Том Лейн, Питер Эйзентраут) §

    Обновление macOS повредило проверку конфигурации для функции strchrnul().

  • Обновление данных часовых поясов до версии tzdata 2025b, включающее изменение правил перехода на летнее время в Чили, а также корректировку исторических данных для Ирана (Том Лейн) §

    Появился новый часовой пояс America/Coyhaique для области Айсен в Чили, который позволяет учитывать для неё часовой пояс UTC-03 без перехода на летнее время и соответствующее расхождение с поясом America/Santiago.