E.21. Выпуск 16.14 #
Дата выпуска: 2026-05-14
В этот выпуск вошли различные исправления, внесённые после версии 16.13. За информацией о нововведениях версии 16 обратитесь к Разделу E.35.
E.21.1. Миграция на версию 16.14 #
Если используется версия 16.X, выгрузка/восстановление базы не требуется.
Также, если вы обновляете сервер с более ранней версии, чем 16.10, см. Раздел E.25.
E.21.2. Изменения #
Предотвращение неограниченной рекурсии при обработке стартовых пакетов подключения (Микаэль Пакье) § §
Ранее злоумышленник мог вызвать сбой подключённого обслуживающего процесса путём бесконечного чередования отклоняемых запросов на шифрование SSL и GSS.
Проект PostgreSQL благодарит Calif.io (при сотрудничестве с Claude и Anthropic Research) за сообщение об этой проблеме. (CVE-2026-6479)
Устранение различных случаев целочисленного переполнения при вычислении объёма памяти (Том Лейн, Натан Боссарт, Хейкки Линнакангас) § § § § § § § § § §
В различных местах существовал риск целочисленного переполнения при вычислении необходимого объёма памяти. Переполнение приводило к выделению недостаточного объёма памяти, в результате чего вызывающий код записывал за пределы буфера. Это вызывало сбой сервера, а также потенциально допускало выполнение произвольного кода. Во многих случаях, но не во всех, угроза наблюдалась в 32-разрядных сборках.
Проект PostgreSQL благодарит команду Xint Code, Брюса Данга, Свена Клемма и Павла Когоута за сообщение об этой проблеме. (CVE-2026-6473)
Корректное экранирование имён объектов при проверках источника логической репликации (Павел Когоут) §
В результате выполнения команды
ALTER SUBSCRIPTION ... REFRESH PUBLICATIONимена схем и отношений подставлялись в SQL-команды без экранирования, что допускало выполнение произвольного SQL-кода на публикующем сервере.Проект PostgreSQL благодарит Павла Когоута за сообщение об этой проблеме. (CVE-2026-6638)
Запрет слишком длинных значений параметров функции
ts_headline()(Микаэль Пакье) §Длина строк
StartSel,StopSelиFragmentDelimiterне должна превышать 32 КБ, однако ранее такая проверка отсутствовала. Как правило, слишком длинные значения приводили к сбою сервера.Проект PostgreSQL благодарит команду Xint Code за сообщение об этой проблеме. (CVE-2026-6473)
Предотвращение передачи вредоносных названий часовых поясов в функциях
timeofday()иpg_strftime()(Том Лейн) § §Через сконструированное название часового пояса функции
snprintf()можно было передать последовательность с%, что вызывало сбой или раскрытие содержимого памяти сервера. Аналогичные риски возникали при переполнении буфера вывода, ограниченного по размеру, при использовании функцииpg_strftime().Проект PostgreSQL благодарит команду Xint Code за сообщение об этой проблеме. (CVE-2026-6474)
Добавление проверки права
CREATEу пользователя в схеме, указанной при создании мультидиапазонного типа (Йелте Феннема-Нио) §Мультидиапазонный тип может быть создан в схеме, отличной от схемы родительского диапазонного типа. Ранее проверки необходимых прав отсутствовали.
Проект PostgreSQL благодарит Йелта Феннема-Нио за сообщение об этой проблеме. (CVE-2026-6472)
Использование сравнения строк с постоянным временем выполнения при аутентификации (Микаэль Пакье) § §
Теперь при проверке паролей, хешей и других значений вместо функции
memcmp()илиstrcmp()используется функцияtimingsafe_bcmp(). Неизвестно, можно ли было практически использовать зависимость времени выполнения указанных функций от данных, но в целях безопасности они были заменены.Проект PostgreSQL благодарит Джо Конвея за сообщение об этой проблеме. (CVE-2026-6478)
Обозначение функции
PQfn()как небезопасной и предотвращение её использования в библиотеке libpq (Натан Боссарт) §Для результата нецелочисленного типа функция
PQfn()не получает информации о размере буфера вывода, поэтому она не может проверить, что для данных, возвращаемых с сервера, хватит памяти. Таким образом злоумышленник мог перезаписать память клиента. Исправить это без изменения API невозможно, поэтому функция помечена как устаревшая. Внутри libpq теперь используется вариант функции, который обеспечивает недостающую проверку.Проект PostgreSQL благодарит Юй Куньпэна и Мартина Хайстермана за сообщение об этой проблеме. (CVE-2026-6477)
Предотвращение прохода по пути при использовании утилит pg_basebackup и pg_rewind (Микаэль Пакье) §
В этих утилитах отсутствовали проверки путей выходных файлов, читаемых из ввода, поэтому злоумышленник мог заменить любой файл, доступный утилитам для записи. Теперь добавлено ограничение для записи данных — не принимаются абсолютные пути или пути, содержащие ссылки на родительские каталоги.
Проект PostgreSQL благодарит команду XlabAI из Tencent Xuanwu Lab и Валерия Губанова за сообщение об этой проблеме. (CVE-2026-6475)
Предотвращение переполнения полей в рамках типа
query_intмодуляcontrib/intarrayи типаltxtqueryмодуляcontrib/ltree(Том Лейн) § §При разборе этих структур отсутствовала проверка переполнения 16-битных полей, что могло привести к созданию некорректного дерева запроса. Выполнение такого запроса могло вызвать сбой сервера.
Проект PostgreSQL благодарит команду Xint Code за сообщение об этой проблеме. (CVE-2026-6473)
Запрет на слишком длинные значения типа
lqueryмодуляcontrib/ltree(Микаэль Пакье) §Значения, содержащие более 64 000 элементов, вызывали внутреннее переполнение, которое могло привести к разрушению стека или неправильным ответам.
Проект PostgreSQL благодарит пользователей с ником Vergissmeinnicht и A1ex и Цзихе Вана за сообщение об этой проблеме. (CVE-2026-6473)
Предотвращение SQL-инъекции и переполнения буфера при работе модуля
contrib/spi(Натан Боссарт) §В функции
check_foreign_key()значения ключей не экранировались, а при построении запросов использовались буферы постоянного размера. Несмотря на то, что модуль представляет собой лишь пример кода, в нём всё равно не должно быть таких серьёзных ошибок.Проект PostgreSQL благодарит Николая Самохвалова за сообщение об этой проблеме. (CVE-2026-6637)
Добавление проверки на наличие недетерминированных правил сортировки перед заключением, что условие на равенство для типа, поддерживающего сортировку, предполагает уникальность (Ричард Гуо) § §
В ряде оптимизаций планировщика предполагалось, что, например, не более одной строки таблицы может удовлетворять условию
WHERE x = 'abc', если дляxесть уникальный индекс. Однако в общем случае такой вывод был небезопасен, если для индекса и условияWHEREуказаны разные правила сортировки. Проблем не возникало, если оба правила были детерминированными, поскольку при этом требуется, чтобы равенство двух строк было побитовым. Недетерминированные правила работают по-другому, поэтому если для условияWHEREили индекса было указано недетерминированное правило сортировки, при оптимизации с предположением об уникальных совпадениях могли выдаваться некорректные результаты.Устранение проблемы неполного удаления ссылок на отношения в структурах
RestrictInfoв ходе удаления соединений (Том Лейн) § §Ранее из-за неполного удаления возникали такие ошибки в работе планировщика, как «FULL JOIN is only supported with merge-joinable or hash-joinable join conditions» (FULL JOIN поддерживается только с условиями, допускающими соединение слиянием или хеш-соединение). В других случаях это также могло приводить к пропуску корректных планов.
Исправление обработки генерируемых столбцов
NEWв действиях и условиях применения правил (Ричард Гуо, Дин Рашид) §Ранее ссылки на такие столбцы выдавали NULL в запросах
INSERTили значениеOLDв запросахUPDATE.Исправление ложных ошибок «generated columns are not supported in COPY FROM WHERE conditions» (генерируемые столбцы не поддерживаются в условиях COPY FROM WHERE) (Том Лейн) §
Ранее эта ошибка иногда могла возникать при использовании системного столбца в условии
COPY FROM WHERE.Исправление сообщения об ошибке сериализации, когда в ходе выполнения команды
MERGEв режиме повторяемого чтения или сериализуемом режиме встречаются параллельно изменяемые кортежи (Тендер Ван) §Ранее поведение в таких случаях совпадало с поведением на более низких уровнях изоляции.
Исправление поведения команды
CREATE TABLE ... LIKE ... INCLUDING STATISTICSв случаях, когда у исходной таблицы есть один или несколько удалённых столбцов (Джулиен Ташуар) §Ранее в этих случаях объекты расширенной статистики могли копироваться некорректно или при выполнении команды могли выдаваться ложные ошибки.
Обеспечение возможности для команды
ALTER INDEX ... ATTACH PARTITIONпомечать родительский индекс как рабочий, когда это необходимо (Сами Имсейх) §В особых случаях секционированный индекс мог остаться помеченным нерабочим, даже если все его дочерние индексы были рабочими. В результате данного изменения пользователь может исправить эту ошибку, не прибегая к обновлению каталога вручную.
Исправление ошибочного удаления зависимости оборачиваемого объекта от функции-обработчика командой
ALTER FOREIGN DATA WRAPPER(Джефф Девис) §Запрет на создание составного типа, который содержит сам себя через мультидиапазон (Хейкки Линнакангас) §
Подобное поведение не допускалось для промежуточных доменов, массивов, составных или диапазонных типов. Мультидиапазоны до настоящего момента не входили в этот список.
Исправлено сравнение образов datum, чтобы оно не зависело от расширения знака (Дэвид Роули) §
Это усовершенствование позволило устранить сценарии, при которых ранее возникали ошибки «could not find memoization table entry» (не удалось найти записи в таблице с мемоизацией) или выдавались неверные результаты запросов.
Исправлена некорректная логика обработки хешированных элементов
IN/NOT INс нестрогим оператором равенства (Ченпэн Ян) §Ранее могли происходить сбои или выдаваться неверные ответы. Для всех встроенных типов данных имеются строгие операторы равенства, поэтому описанная проблема могла возникнуть только с типами данных расширений.
Усечение слишком длинных числовых символов, зависящих от локали, функцией
to_char()(Том Лейн) §Ранее если локаль задавала символ валюты, разделитель тысяч, десятичный разделитель или знак длиннее 8 байтов, буфер мог переполниться. На практике таких локалей не существует, и для злоумышленника без прав обычно невозможно установить вредоносное определение локали под сервером Postgres. Однако в целях безопасности была добавлена проверка длины символов и возможность их усечения при необходимости.
Предотвращение переполнения буфера при разборе файла аффиксов для словаря
Ispell(Том Лейн) § §Повреждённый или вредоносный файл аффиксов мог привести к сбою сервера. Это не рассматривается как угроза безопасности, так как файлы конфигурации текстового поиска считаются доверенными, но поведение было исправлено.
Предотвращение целочисленного переполнения при вычислении начальной и конечной позиций для оконных агрегатных функций (Ричард Гуо) §
Слишком большие смещения, заданные пользователем (приближающиеся к INT64_MAX), могли привести к ошибкам или некорректным результатам запросов.
Исправление поведения функции
array_agg_array_combine()для корректного объединения битовых карт NULL для массивов (Дмитро Астапов) §Ранее при параллельных вычислениях
array_agg(anyarray)иногда получался некорректный результат.Повторный запуск
sync_file_range()при возникновении ошибкиEINTR(Тэмён Кан) §Исправление поведения функции
pg_stat_reset_single_table_counters()в общем каталоге (Чао Ли) §Ранее наблюдался нежелательный побочный эффект сброса текущего значения
stat_reset_timestampбазы данных.Обновление статистики в периоды простаивания параллельного рабочего процесса (Хоу Чжицзе) §
Ранее статистика по недавно завершённой транзакции могла долго не записываться, особенно при низкой нагрузке.
Устранение выхода за границы буфера при получении функцией
pglz_decompress()повреждённых входных данных (Эндрю Дунстан) §В некоторых случаях могло происходить чтение нескольких байтов за пределами входных данных, что при неблагоприятном стечении обстоятельств могло привести к сбою.
Обеспечение проверки внутренней согласованности структур данных tuplestore даже после возникновения ошибки (Том Лейн) §
Ранее эта проверка отсутствовала, что как правило, не вызывало проблем кроме случаев, когда объект tuplestore требовался для курсора
WITH HOLD. В версии 15 и ниже происходили легко воспроизводимые сбои. В более высоких версиях эта уязвимость не наблюдалась, но изменение было внесено во все версии для поддержания единообразия.Исправление преждевременного вывода NULL в полях задержки репликации в представлении
pg_stat_replication(Синъя Като) §Часто в столбах задержки значения сбрасывались к NULL, даже если процесс репликации всё ещё был активен.
Предотвращение редких случаев ошибок сброса при работе с индексами GiST, не записываемыми в WAL (Томаш Вондра) §
Несмотря на то, что индекс GiST является нежурналируемым, в некоторых случаях могли возникать ошибки «xlog flush request
n/nnnnis not satisfied» (запрос на сброс xlogn/nnnnне выполнен) из-за некорректного выбора «фиктивного LSN» в качестве позиции записи.Исправление недооценки требуемого размера карт страниц DSA для сегментов нестандартного размера (Пол Бунн) §
Ошибки в вычислениях приводили к выходу за пределы буфера и в результате к сбоям сервера.
Устранение риска сбоя сервера при обработке расширенной статистики по выражениям, использующих типы данных расширений (Микаэль Пакье) §
Ранее были возможны обращения по нулевому указателю, если функция typanalyze для типа данных не выводила никакой полезной статистики. Ни одна встроенная функция typanalyze не вела себя подобным образом, но в расширениях это было возможно.
Устранение незначительных утечек памяти при обработке строк на основе ICU (Джефф Девис) §
Корректная остановка дочерних процессов перед завершением работы postmaster при сбое стартового процесса (Аюш Тивари) §
Ранее отключение строилось на давно устаревшем предположении, что во время работы процесса запуска других дочерних процессов postmaster нет, поэтому немедленное завершение postmaster было допустимо. Потерянные дочерние процессы замечали отключение postmaster и завершались самостоятельно, но теперь используется более аккуратная процедура остановки.
Устранение условия гонки между воспроизведением записей WAL о контрольных точках и создании идентификаторов мультитранзакций (Хейкки Линнакангас) §
Ранее при воспроизведении WAL с главного сервера на более старом корректирующем выпуске могло происходить зацикливание резервного сервера — бесконечное чередование состояний сбоя и перезапуска — с ошибкой «could not access status of transaction» (не удалось получить состояние транзакции).
Устранение бесконечного ожидания при отключении процесса walsender (Антонин Боннефой) § §
Ранее при отключении кластера, публикующего данные логической репликации, процесс walsender ожидал записи всех WAL в очереди на обработку. Однако корректного запроса на такую запись не было, что в некоторых случаях приводило к бесконечному ожиданию.
Обеспечение сохранения изменений в картах свободного пространства таблиц при восстановлении (Алексей Махмутов) §
Ранее в случае изменения карты свободного пространства при воспроизведении записей WAL, которые предполагали её изменения, буфер страниц карты не помечался как «грязный», если контрольные суммы были включены. В результате изменения могли быть не записаны. Со временем это вызывало большие расхождения между картой и реальным содержимым таблицы на резервном сервере. Хотя карта используется исключительно в качестве указания, после повышения резервного сервера это могло привести к значительному снижению производительности, которое сохранялось до обновления карты.
Устанение сбоев некоторых функций ecpg при их вызове без установленного соединения (Шрути Говда) §
Исправление различных ошибок при распаковке резервных копий и разборе tar (Эндрю Дунстан, Том Лейн, Чао Ли) § § §
При распаковке и чтении файлов tar pg_basebackup и pg_verifybackup неправильно обрабатывали данные для выравнивания файлов tar, в некоторых случаях повреждали данные, сжатые методом LZ4, пропускали проверки ряда нетипичных ошибок, а также наблюдались проблемы с отключением после ошибок сжатия/распаковки (приводящие к каскадным сообщениям об ошибках) и утечки памяти.
Запрет на пропуск предоставлений прав
GRANTот праводателей с недействительными значениями OID в pg_dumpall (Том Лейн) §Теперь
GRANTбез предложенияGRANTED BYвыгружается, как это происходило до версии 16. Это позволяет избежать потери предоставления прав в ряде предсказуемых случаев: до версии 16 было возможно удалить роль праводателя. Предупреждение об отсутствующем праводателе теперь выводится, только если версия исходного сервера 16 или выше.Обеспечение использования корректной версии протокола при подключении к исходным серверам более старых версий в pg_upgrade (Джейкоб Чемпион) §
Ошибки могли возникать при попытке обновления сервера с версии до 2018 года.
Разрешение модулю
contrib/basic_archiveпродолжать работу при отсутствии каталога архива в начале процесса архивирования (Натан Боссарт) §Ранее, если параметр
basic_archive.archive_directoryне указывал на существующий каталог, он отклонялся. Это поведение было нежелательно, так как могло приводить бесконечному зависанию архивирования, даже если каталог появлялся позже.Корректная обработка изменения байтовой длины строки при смене регистра модулем
contrib/ltree(Джефф Девис) §Ранее шаблоны
lqueryдля сопоставлений без учёта регистра упускали совпадения в метках, которые совпадали.Устранение утечки памяти при возникновении ошибки в ходе разбора файла
pgss_query_texts.statвcontrib/pg_stat_statements(Хейкки Линнакангас) §Устранение риска сбоя модуля
contrib/postgres_fdwпри преждевременной очистке неудачного подключения (Эцуро Фудзита) §Ранее, если удалённое соединение становилось непригодным во время аварийной очистки, его нельзя было использовать дальше. Теперь подключение не закрывается до окончания транзакции на случай, если на него ещё есть ссылки в структурах данных, такие как открытые курсоры.
Обновление данных часовых поясов до версии tzdata 2026b (Том Лейн) §
С ноября 2026 года в Британский Колумбии (Америка/Ванкувер) время весь год будет определяться часовым поясом UTC-07 (постоянный переход на летнее время). В этом выпуске предполагается, что для обозначения часового пояса будет использоваться аббревиатура
MST. Есть вероятность, что сокращение изменится, но пока неясно, как будет выглядеть новая аббревиатура. Также была выполнена корректировка исторических данных для Молдавии: с 2022 года там осуществляют переход на летнее время, принятый в Европейском союзе.
E.21. Release 16.14 #
Release date: 2026-05-14
This release contains a variety of fixes from 16.13. For information about new features in major release 16, see Section E.35.
E.21.1. Migration to Version 16.14 #
A dump/restore is not required for those running 16.X.
However, if you are upgrading from a version earlier than 16.10, see Section E.25.
E.21.2. Changes #
Prevent unbounded recursion while processing startup packets (Michael Paquier) § §
A malicious client could crash the connected backend by alternating rejected SSL and GSS encryption requests indefinitely.
The PostgreSQL Project thanks Calif.io (in collaboration with Claude and Anthropic Research) for reporting this problem. (CVE-2026-6479)
Fix assorted integer overflows in memory-allocation calculations (Tom Lane, Nathan Bossart, Heikki Linnakangas) § § § § § § § § § §
Various places were incautious about the possibility of integer overflow in calculations of how much memory to allocate. Overflow would lead to allocating a too-small buffer which the caller would then write past the end of. This would at least trigger server crashes, and probably could be exploited for arbitrary code execution. In many but by no means all cases, the hazard exists only in 32-bit builds.
The PostgreSQL Project thanks Xint Code, Bruce Dang, Sven Klemm, and Pavel Kohout for reporting these problems. (CVE-2026-6473)
Properly quote object names in logical replication origin checks (Pavel Kohout) §
ALTER SUBSCRIPTION ... REFRESH PUBLICATIONinterpolated schema and relation names into SQL commands without quoting them, allowing execution of arbitrary SQL on the publisher.The PostgreSQL Project thanks Pavel Kohout for reporting this problem. (CVE-2026-6638)
Reject over-length options in
ts_headline()(Michael Paquier) §The
StartSel,StopSelandFragmentDelimiterstrings must not exceed 32Kb in length, but this was not checked for. An over-length value would typically crash the server.The PostgreSQL Project thanks Xint Code for reporting this problem. (CVE-2026-6473)
Guard against malicious time zone names in
timeofday()andpg_strftime()(Tom Lane) § §A crafted time zone setting could pass
%sequences tosnprintf(), potentially causing crashes or disclosure of server memory. Another path to similar results was to overflow the limited-size output buffer used bypg_strftime().The PostgreSQL Project thanks Xint Code for reporting this problem. (CVE-2026-6474)
When creating a multirange type, ensure the user has
CREATEprivilege on the schema specified for the multirange type (Jelte Fennema-Nio) §The multirange type can be put into a different schema than its parent range type, but we neglected to apply the required privilege check when doing so.
The PostgreSQL Project thanks Jelte Fennema-Nio for reporting this problem. (CVE-2026-6472)
Use timing-safe string comparisons in authentication code (Michael Paquier) § §
Use
timingsafe_bcmp()instead ofmemcmp()orstrcmp()when checking passwords, hashes, etc. It is not known whether the data dependency of those functions is usefully exploitable in any of these places, but in the interests of safety, replace them.The PostgreSQL Project thanks Joe Conway for reporting this problem. (CVE-2026-6478)
Mark
PQfn()as unsafe, and avoid using it within libpq (Nathan Bossart) §For a non-integral result type,
PQfn()is not passed the size of the output buffer, so it cannot check that the data returned by the server will fit. A malicious server could therefore overwrite client memory. This is unfixable without an API change, so mark the function as deprecated. Internally to libpq, use a variant version that can apply the missing check.The PostgreSQL Project thanks Yu Kunpeng and Martin Heistermann for reporting this problem. (CVE-2026-6477)
Prevent path traversal in pg_basebackup and pg_rewind (Michael Paquier) §
These applications failed to validate output file paths read from their input, so that a malicious source could overwrite any file writable by these applications. Constrain where data can be written by rejecting paths that are absolute or contain parent-directory references.
The PostgreSQL Project thanks XlabAI Team of Tencent Xuanwu Lab and Valery Gubanov for reporting this problem. (CVE-2026-6475)
Guard against field overflow within
contrib/intarray'squery_inttype andcontrib/ltree'sltxtquerytype (Tom Lane) § §Parsing of these query structures did not check for overflow of 16-bit fields, so that construction of an invalid query tree was possible. This can crash the server when executing the query.
The PostgreSQL Project thanks Xint Code for reporting this problem. (CVE-2026-6473)
Guard against overly long values of
contrib/ltree'slquerytype (Michael Paquier) §Values with more than 64K items caused internal overflows, potentially resulting in stack smashes or wrong answers.
The PostgreSQL Project thanks Vergissmeinnicht, A1ex, and Jihe Wang for reporting this problem. (CVE-2026-6473)
Prevent SQL injection and buffer overruns in
contrib/spi(Nathan Bossart) §check_foreign_key()was insufficiently careful about quoting key values, and also used fixed-length buffers for constructing queries. While this module is only meant as example code, it still shouldn't contain such dangerous errors.The PostgreSQL Project thanks Nikolay Samokhvalov for reporting this problem. (CVE-2026-6637)
Check for nondeterministic collations before assuming that an equality condition on a collatable type implies uniqueness (Richard Guo) § §
Numerous planner optimizations assume that, for example, at most one table row can satisfy
WHERE x = 'abc'if there is a unique index onx. However this conclusion is unsafe in general if the index and theWHEREclause have different collations attached. It is safe when both collations are deterministic, because that property essentially requires that equality of two strings means bitwise equality. But nondeterministic collations don't act that way, so that optimizing on the assumption of unique matches can give wrong query answers if either theWHEREclause or the index has a nondeterministic collation.Fix incomplete removal of relation references in
RestrictInfostructs during join removal (Tom Lane) § §This oversight has been shown to result in planner failures such as unexpected “FULL JOIN is only supported with merge-joinable or hash-joinable join conditions” errors. It may also have caused failure to consider valid plans in other cases.
Fix incorrect handling of
NEWgenerated columns in rule actions and rule qualifications (Richard Guo, Dean Rasheed) §Previously, such column references would produce NULL in
INSERTcases, or be equivalent to theOLDvalue inUPDATEcases.Fix spurious “generated columns are not supported in COPY FROM WHERE conditions” errors (Tom Lane) §
Use of a system column in a
COPY FROM WHEREcondition could sometimes incorrectly report this error.Correctly report a serialization failure when
MERGEencounters a concurrently-updated tuple in repeatable-read or serializable mode (Tender Wang) §Previously, such cases behaved the same as in lower isolation levels.
Fix
CREATE TABLE ... LIKE ... INCLUDING STATISTICSfor cases where the source table has dropped column(s) (Julien Tachoires) §In such cases, extended statistics objects could be copied incorrectly, or the command could give an incorrect error.
Allow
ALTER INDEX ... ATTACH PARTITIONto mark the parent index valid if appropriate (Sami Imseih) §There are edge cases in which a partitioned index might remain marked as invalid even when all its leaf indexes are valid. This change provides a mechanism whereby a user can correct such a situation without resorting to manual catalog updates.
Fix
ALTER FOREIGN DATA WRAPPERto not drop the wrapper object's dependency on its handler function (Jeff Davis) §Disallow making a composite type be a member of itself via a multirange (Heikki Linnakangas) §
We already forbade such cases when the intermediate type is a domain, array, composite type, or range; but multiranges were overlooked.
Fix datum-image comparisons to be insensitive to sign-extension variations (David Rowley) §
This fixes some situations that previously led to “could not find memoization table entry” errors or wrong query results.
Fix incorrect logic for hashed
IN/NOT INwith non-strict equality operator (Chengpeng Yan) §The previous coding could crash or give wrong answers. All built-in data types have strict equality operators, so that this issue could only arise with an extension data type.
Truncate overly-long locale-specific numeric symbols in
to_char()(Tom Lane) §If a locale specified a currency symbol, thousands separator, or decimal or sign symbol more than 8 bytes long, a buffer overrun was possible. No such locales exist in the real world, and it's impractical for an unprivileged attacker to install a malicious locale definition underneath a Postgres server; but for safety's sake check for overlength symbols and truncate if needed.
Prevent buffer overruns when parsing an affix file for an
Ispelldictionary (Tom Lane) § §A corrupt or malicious affix file could crash the server. This is not considered a security issue because text search configuration files are presumed trustworthy, but it still seems worth fixing.
Guard against integer overflow in calculations of frame start and end positions for window aggregates (Richard Guo) §
Very large user-specified offsets (close to INT64_MAX) could result in errors or incorrect query results.
Fix
array_agg_array_combine()to combine the arrays' null bitmaps correctly (Dmytro Astapov) §This mistake resulted in sometimes-incorrect output from parallelized
array_agg(anyarray)calculations.Retry
sync_file_range()if it returns error codeEINTR(DaeMyung Kang) §Fix incorrect behavior of
pg_stat_reset_single_table_counters()on a shared catalog (Chao Li) §Such cases had a side-effect of resetting the current database's
stat_reset_timestamp, which was unintended.Update activity statistics when a parallel apply worker is idle (Zhijie Hou) §
Previously, statistics from a recently-completed transaction might go unreported for long intervals, particularly if the workload is light.
Fix buffer overread when
pglz_decompress()receives corrupt input (Andrew Dunstan) §It was possible to read a few bytes past the end of the input, which in very unlucky cases might cause a crash.
Ensure that tuplestore data structures are internally consistent even after an error (Tom Lane) §
The code was previously careless about this, which is fine most of the time but is problematic for the tuplestore backing a
WITH HOLDcursor. In v15 and before this leads to easily-reproducible crashes; later branches are not known to be vulnerable, but it seems best to preserve consistency in all.Fix premature NULL lag reporting in
pg_stat_replication(Shinya Kato) §The lag columns frequently read as NULL even while replication activity was happening.
Avoid rare flush failure when working with non-WAL-logged GiST indexes (Tomas Vondra) §
A non-logged GiST index could nonetheless sometimes produce “xlog flush request
n/nnnnis not satisfied” errors, due to incorrect selection of a “fake LSN” to represent an insertion point.Fix underestimate of required size of DSA page maps for odd-size segments (Paul Bunn) §
This miscalculation led to out-of-bounds accesses and hence server crashes.
Fix possible server crash when processing extended statistics on expressions of extension data types (Michael Paquier) §
NULL pointer dereferences were possible if the data type's typanalyze function does not compute any useful statistics. No in-core typanalyze function behaves that way, but extensions could.
Fix minor memory leaks in ICU-based string processing (Jeff Davis) §
If the startup process fails, properly shut down other child processes before exiting the postmaster (Ayush Tiwari) §
The handling of this situation relied on a long-obsolete assumption that no other postmaster children exist while the startup process is running, so that immediate postmaster exit is acceptable. Orphaned children would eventually notice the postmaster's death and exit on their own, but a cleaner shutdown procedure is desirable.
Fix race condition between WAL replay of checkpoints and multixact ID creations (Heikki Linnakangas) §
A standby server following WAL from a primary of an older minor version could get into a crash-and-restart loop complaining about “could not access status of transaction”.
Prevent indefinite wait in shutdown of a walsender process (Anthonin Bonnefoy) § §
At shutdown of a cluster that is publishing logical replication data, the walsender waits for all pending WAL to be written out. But it did not correctly request that to happen, so that in some cases this could become an indefinite wait.
Ensure that changes to tables' free space maps are persisted during recovery (Alexey Makhmutov) §
Previously, while WAL replay did update the free space map while replaying operations that should change it, the map page buffer did not get marked dirty if checksums are enabled, so that the changes might never get written out. On a standby server, over time this would result in a map wildly at variance with the table's actual contents. While the map is only used as a hint, this condition could cause significant performance degradation for some period of time after the standby server is promoted to be active, until most of the map has been repaired by updates.
Fix crashes in some ecpg functions when called without any established connection (Shruthi Gowda) §
Fix assorted bugs in backup decompression and tar-parsing code (Andrew Dunstan, Tom Lane, Chao Li) § § §
The decompression and tar-file reading code used in pg_basebackup and pg_verifybackup mishandled tar-file padding data, could corrupt LZ4-compressed data in edge cases, failed to check for some unusual error conditions, failed to exit after compression/decompression errors (leading to cascading error reports), and leaked memory.
In pg_dumpall, don't skip role
GRANTs with dangling grantor OIDs (Tom Lane) §Instead, handle such cases by emitting
GRANTwithout anyGRANTED BYclause, as we did before v16. This avoids losing the grant in foreseeable cases, since pre-v16 servers didn't prevent dropping the grantor role. Continue to emit a warning about the missing grantor, but only if the source server is v16 or later.In pg_upgrade, take care to use the correct protocol version when connecting to older source servers (Jacob Champion) §
This could be problematic when attempting to upgrade from a pre-2018 server.
In
contrib/basic_archive, allow the archive directory to be missing at startup (Nathan Bossart) §Previously, the setting of
basic_archive.archive_directorywas rejected if it didn't point to an existing directory. This is undesirable because archiving will be stuck indefinitely, even if the directory appears later.Fix
contrib/ltreeto cope when case-folding changes a string's byte length (Jeff Davis) §Previously,
lquerypatterns specifying case-insensitive matching might fail to match labels they should match.In
contrib/pg_stat_statements, don't leak memory if an error occurs while parsing thepgss_query_texts.statfile (Heikki Linnakangas) §In
contrib/postgres_fdw, avoid crash due to premature cleanup of a failed connection (Etsuro Fujita) §If a remote connection fails abort cleanup, we can't use it any longer. But delay closing the connection object until end of transaction, because there might still be references to it within data structures such as open cursors.
Update time zone data files to tzdata release 2026b (Tom Lane) §
British Columbia (America/Vancouver) will be on year-round UTC-07 (effectively, permanent DST) beginning in November 2026. This release assumes that their TZ abbreviation will be
MSTfrom that time forward. That seems likely to change, but it's unclear what new abbreviation will be used. Also a historical correction for Moldova: they have followed EU DST transition times since 2022.