E.16. Выпуск 16.9#
E.16. Выпуск 16.9 #
Дата выпуска: 2025-05-08
Этот выпуск содержит различные исправления из версии 16.8. Для получения информации о новых функциях в основном выпуске 16, см. Раздел E.25.
E.16.1. Миграция на версию 16.9 #
Снятие дампа/восстановление не требуется для тех, кто использует 16.X.
Однако, если на секционированных таблицах имелись какие-либо самоссылочные ограничения внешнего ключа, может потребоваться воссоздание этих ограничений, чтобы гарантировать их правильное соблюдение. См. вторую запись в журнале изменений ниже.
Также, если у вас есть BRIN bloom индексы, может быть целесообразно переиндексировать их после обновления. См. третью запись в журнале изменений ниже.
Также, если выполняется обновление с версии ранее 16.5, см. Раздел E.20.
E.16.2. Изменения #
Избегалось однобайтовое перепрочтение буфера при проверке неправильно закодированных строк, которые заявлены как имеющие кодировку GB18030 (Ноа Миш, Андрес Фройнд) § §
Хотя это маловероятно, мог произойти сбой SIGSEGV, если неполный многобайтовый символ появлялся в конце памяти. Это было возможно как на сервере, так и в приложениях, использующих libpq. (CVE-2025-4207)
Самоссылающиеся внешние ключи на секционированных таблицах обработаны корректно (Альваро Эррера) §
Создание или присоединение разделов не удалось сделать необходимые записи в каталоге для ограничения внешнего ключа, если таблица, на которую ссылалось ограничение, была той же самой секционированной таблицей. Это привело к невозможности полного соблюдения ограничения.
Чтобы исправить это, следует удалить и воссоздать любые самоссылочные внешние ключи на секционированных таблицах, если секции были созданы или присоединены с момента создания ограничения. Имейте в виду, что нарушающие строки могут уже присутствовать, в этом случае воссоздание ограничения завершится неудачей, и потребуется исправить эти строки перед повторной попыткой.
Предотвращение потери данных при объединении сжатых сводок BRIN в
brin_bloom_union()(Tomas Vondra) §Код не учитывал, что результаты декомпрессии не были идентичны входным объектам, что приводило к невозможности добавления некоторых данных в объединенное резюме, что приводило к пропущенным строкам при поиске в индексе.
Эта ошибка присутствовала начиная с версии 14, когда были введены BRIN bloom индексы, но этот путь кода тогда использовался редко. В версии 17 вероятность его использования значительно выше, потому что параллельные построения индексов теперь используют этот код.
Исправлены неожиданные ошибки “атрибут имеет неправильный тип” в запросах
UPDATE,DELETEиMERGE, которые используют ссылки на всю строку таблицы на представления или функции вFROM(Том Лейн) §Исправлено
MERGEв секционированную таблицу с действиямиDO NOTHING(Tender Wang) §Некоторые случаи завершились с ошибками “неизвестное действие в MERGE WHEN clause”.
Предотвращение сбоя в командах
INSERT, когда таблица имеетGENERATEDстолбец с доменным типом данных, и ограничения домена запрещают значения null (Цзянь Хи) §Отказ ограничения был сообщен, даже если выражение генерации выдало совершенно корректный результат.
Корректно обрабатывались ссылки на внешние имена CTE, которые появляются внутри
WITHвыражения, прикрепленного кINSERT/UPDATE/DELETE/MERGEкоманды, находящейся внутриWITH(Том Лейн) §Парсер не смог обнаружить недопустимые случаи рекурсии, а также не учитывал такие ссылки при сортировке CTE в пригодный для использования порядок.
Не пытайтесь параллелизовать
array_agg(), когда аргумент имеет анонимный тип записи (Ричард Гуо, Том Лейн) §Протокол для общения с параллельными рабочими процессами не поддерживает идентификацию конкретного типа записи, который возвращает рабочий процесс.
Исправлены конструкции
ARRAY(иsubquery)ARRAY[для получения корректных результатов, когда ввод имеет типexpression, ...]int2vectorилиoidvector(Том Лейн) §Этот патч восстановил поведение, которое существовало до PostgreSQL 9.5: результат имеет тип
int2vector[]илиoidvector[].Исправлены возможные ошибочные сообщения о недопустимых аффиксах при разборе Ispell словарей (Jacob Brazeal) §
Исправлено
ALTER TABLE ADD COLUMNдля корректной обработки случая с типом домена, который имеет значение по умолчанию (Цзянь Хи, Том Лейн, Tender Wang) § §Если у доменного типа есть значение по умолчанию, добавление столбца этого типа (без какого-либо явного
DEFAULTвыражения) не удалось установить значение по умолчанию домена в существующих строках, вместо этого оставляя новый столбец пустым.Исправлено неправильное поведение, когда имеются дублирующиеся имена столбцов в
ON DELETE SET DEFAULTилиSET NULLдействии ограничения внешнего ключа (Том Лейн) §Улучшено сообщение об ошибке для запрещенных попыток изменить свойства ограничения внешнего ключа (Альваро Эррера) §
Исправление ошибки при сбросе флага
relhassubclassдля временной таблицы, помеченной какON COMMIT DELETE ROWS(Noah Misch) §Добавлено отсутствующее обратное преобразование опции
INDENTвXMLSERIALIZE()(Jim Jones) § §Ранее представления или правила, использующие
XMLSERIALIZE(... INDENT), были выгружены без предложенияINDENT, что приводило к неправильным результатам после восстановления.Избегалась преждевременная оценка аргументов агрегатной функции, которая имела как
FILTER, так иORDER BY(илиDISTINCT) опции (Дэвид Роули) §Если присутствует
ORDER BYилиDISTINCT, рассматривалась возможность предварительной сортировки входных значений агрегата, а не выполнения сортировки внутри узла плана Agg. Однако это проблематично, если входные данные агрегата включают выражения, которые могут завершиться ошибкой (например, деление, где некоторые из делителей могут быть равны нулю), и имеется предложениеFILTER, предназначенное для предотвращения таких ошибок. Предварительная сортировка переместила бы вычисления выражений до проверкиFILTER, что позволило бы ошибкам все равно произойти. Это избегалось, не выполняя предварительную сортировку, если присутствуетFILTERи входные выражения являются чем-то более сложным, чем простой Var или Const.Исправлена ошибка планировщика, из-за которой не удавалось идентифицировать более одного хэшируемого подвыражения ScalarArrayOpExpr в рамках выражения верхнего уровня (Дэвид Гейер) §
Это приводило к неоправданно неэффективному выполнению любых дополнительных подвыражений, которые могли быть обработаны с помощью хеш-таблицы (то есть,
IN,NOT IN, или= ANYпредложения с полностью постоянными правыми частями).Отключена оптимизация “пропуска выборки” в сканировании кучи с битовой картой (Маттиас ван де Меент) §
Оказалось, что эта оптимизация может привести к возврату удалённых кортежей, когда параллельная очистка отмечает страницу как полностью видимую.
Исправлены проблемы с производительностью при запуске поиска в индексе GIN, когда имеется много ключей поиска (Том Лейн, Vinod Sridharan) § §
Индексируемое предложение с множеством ключей (например,
jsonbcol ?| array[...]с десятками тысяч элементов массива) занимало O(N2) времени для запуска и было неотменяемым в этот интервал.Обнаружены отсутствующие процедуры поддержки в классе операторов индекса BRIN, и сообщена ошибка вместо сбоя (Альваро Эррера) §
Отвечено на прерывания (такие как отмена запроса) во время ожидания асинхронных подпланов узла плана Append (Хейкки Линнакангас) §
Ранее ничего не происходило, пока один из подпланов не становился готовым.
Частота отчета статистики ввода-вывода активных отправителей WAL была увеличена (Бертран Друво) §
Ранее представление
pg_stat_ioне удавалось накапливать ввод-вывод, выполняемый отправителем WAL, до завершения этого процесса. Теперь такой ввод-вывод будет сообщаться с задержкой не более одной секунды.Исправлено состояние гонки в обработке
synchronous_standby_namesсразу после запуска (Мельников Максим, Майкл Пакье) §В течение короткого периода после запуска системы процессы могут не дождаться синхронного подтверждения, даже если
synchronous_standby_namesвключено.Избегалась бесконечная петля, если
scram_iterationsустановлено на INT_MAX (Кевин К Биджу) §Избегались возможные сбои из-за двойного преобразования подзапроса
json_array()(Том Лейн) §Исправлена
pg_strtof(), чтобы не происходил сбой с нулевым endptr (Александр Лахин, Том Лейн) §Исправлен сбой после нехватки памяти в некоторых присвоениях GUC (Даниэль Густафссон) §
Избегался сбой, когда стеммер Snowball сталкивался с условием нехватки памяти (Максим Коротков) §
Запрещено копирование аннулированных слотов репликации (Shlok Kyal) §
Это предотвращает проблемы, когда недопустимый слот указывает на WAL, который уже был удалён.
Запрещено восстановление слотов логической репликации на резервных серверах, которые не находятся в режиме горячего резерва (Масахико Савада) §
Это предотвращает сценарий, при котором слот мог бы оставаться действительным после повышения, даже если
wal_levelслишком низкий.Предотвращено чрезмерное продвижение каталога xmin в режиме “быстрой перемотки вперед” логического декодирования (Zhijie Hou) §
Эта ошибка могла позволить удалённым записям каталога быть удалёнными с помощью vacuum, даже если они всё ещё потенциально были нужны процессу чтения WAL.
Исправление случаев потери данных, когда операции DDL, не накладывающие сильную блокировку, затрагивали таблицы, которые логически реплицировались (Shlok Kyal, Hayato Kuroda) § §
Изменения каталога, вызванные командой DDL, не были отражены в процессах декодирования WAL, что позволяло им декодировать последующие изменения, используя устаревшие данные каталога, что, вероятно, приводило к повреждению данных.
Предотвращено некорректное сброс репликационного происхождения, когда рабочий процесс применения сталкивался с ошибкой, но ошибка была поймана и не приводила к завершению работы (Хаято Курода) §
Эта ошибка могла позволить применить дублированные данные.
Избегалось создание дублирующих снимков при поиске индексов в логической репликации (Хейкки Линкангас) § §
Улучшено обнаружение подписок смешанного происхождения (Hou Zhijie, Shlok Kyal) §
При создании подписки выводится предупреждение, если подписанная таблица также отслеживается через другие публикации, так как это может привести к получению дублирующихся данных. Это изменение улучшает эту логику, чтобы также обнаруживать случаи, когда родительская или дочерняя таблица раздела отслеживается через другую публикацию.
Исправлены неверные детали контрольной точки в сообщении об ошибке о неправильном выборе временной шкалы восстановления (Дэвид Стил) §
Если запрашиваемая временная шкала восстановления не может быть достигнута, сообщаемые контрольная точка и временная шкала должны быть значениями, прочитанными из backup_label, если он существует. Это сообщение ранее сообщало значения из контрольного файла, что правильно при восстановлении из контрольного файла без backup_label, но не когда существует backup_label.
Удалено некорректное утверждение в
pgstat_report_stat()(Майкл Пакье) §Исправлено чрезмерно строгую проверку в
gistFindCorrectParent()(Хейки Линнакангас) §Исправлена редкая ошибка утверждения на резервных серверах, когда основной сервер был перезапущен (Хейкки Линнакангас) §
В PL/pgSQL избегалась ошибка “неожиданный тип узла плана”, когда прокручиваемый курсор определялся на простом запросе
SELECT(Андрей Лепихов) §expressionПредотвращение удалений отдельных разделов индексов в режиме
--cleanpg_dump (Jian He) §Сервер отклоняет такие команды
DROP. Это не имеет реальных последствий, так как разделы все равно будут удалены в последующихDROPлибо их родительских таблиц, либо их разделенного индекса. Однако ошибка, сообщаемая при попытке удаления, вызывает проблемы при восстановлении в режиме--single-transaction.В pg_dumpall избегалось создание недопустимых команд
GRANTдля ролей, еслиpg_auth_membersсодержало недопустимые OID ролей (Том Лейн) §Вместо этого выводилось предупреждение и пропускалась запись. Это лучше справлялось с повреждением каталога, которое наблюдалось в предыдущих версиях как результат условий гонки между
GRANTиDROP ROLE.Разрешено прерывание запросов
contrib/dblinkс помощью отмены запроса (Ноа Миш) §Это изменение было перенесено из исправления эпохи v17. Оно предотвращает возможные зависания в
CREATE DATABASEиDROP DATABASEиз-за неспособности обнаружить взаимоблокировки.Избегалось аварийное завершение работы с поврежденными входными данными в
contrib/pageinspect'sheap_page_items()(Дмитрий Коваленко) §Предотвращен сбой утверждения в
contrib/pg_freespacemap'spg_freespacemap()(Tender Wang) §Применение
pg_freespacemap()к отношению, не имеющему хранения (например, представление), вызывало сбой утверждения, хотя в сборках без утверждений это не имело негативного эффекта. Добавлена проверка ошибки для отклонения этого случая.Обновлены файлы данных часовых поясов до tzdata версии 2025b для изменений закона о летнем времени в Чили, а также исторические исправления для Ирана (Том Лейн) §
Добавлена новая часовая зона America/Coyhaique для региона Айсен в Чили, чтобы учесть её переход на UTC-03 круглый год и, таким образом, отклонение от America/Santiago.