E.32. Выпуск 15.8
Дата выпуска: 2024-08-08
В этот выпуск вошли различные исправления, внесённые после версии 15.7. За информацией о нововведениях версии 15 обратитесь к Разделу E.40.
E.32.1. Миграция на версию 15.8
Если используется версия 15.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 15.7, см. Раздел E.33.
E.32.2. Изменения
Запрет выполнения несанкционированного кода во время работы pg_dump (Масахико Савада) §
Злоумышленник, способный создавать и удалять невременные объекты, мог внедрить SQL-код, который выполнялся бы параллельным сеансом pg_dump с правами роли, запускавшей pg_dump (которая зачастую является суперпользователем). Атака заключается в замене последовательности или аналогичного объекта представлением или внешней таблицей, которая выполняет вредоносный код. Чтобы её предотвратить, был добавлен новый параметр сервера
restrict_nonsystem_relation_kind, который может отключить расширение невстроенных представлений и доступ к сторонним таблицам, а также позволяет pg_dump устанавливать такой параметр, если это возможно. Обратите внимание, что атака предотвращается, только если версии pg_dump и сервера, с которого выполняется выгрузка, содержат это исправление.Проект PostgreSQL благодарит Ноя Миша за сообщение об этой проблеме. (CVE-2024-7348)
Предотвращение бесконечного цикла в
VACUUM(Мелани Плейгман) §Если после отключения резервный сервер со старой выполняющейся транзакцией повторно подключался к ведущему серверу, у команды
VACUUMна ведущем сервере могли возникнуть проблемы при определении кортежей, подлежащих удалению, что приводило к бесконечному циклу.Устранение ошибки после добавления таблицы в качестве секции, если у этой таблицы ранее были потомки в иерархии наследования (Альваро Эррера) §
Исправление поведения команды
ALTER TABLE DETACH PARTITIONв случаях, связанных с несогласованными ограничениями на основе индексов (Альваро Эррера, Тендер Ван) §Если у секционированной таблицы был индекс, не связанный с ограничением, но у секции был равнозначный связанный с ограничением индекс, то отсоединение секции работало неправильно, оставляя в ограничении бывшей секции некорректное значение
coninhcount. Это вызывало проблемы при любых дальнейших действиях с этим ограничением.Исправлена настройка отсечения секций во время выполнения
ALTER TABLE DETACH PARTITION CONCURRENTLY(Альваро Эррера) § §Исполнитель предполагал, что ни одна секция не может быть отсоединена в интервале между планированием и выполнением запроса для секционированной таблицы. С появлением параметра
CONCURRENTLYдействияDETACH PARTITIONэто не так: теперь при использовании этого действия временно возможно завершение запроса ошибкой.Исправление изменения значения поля
pg_class.reltuplesсекционированной таблицы на ноль после удаления её последней дочерней секции (Ной Миш) §Первая команда
ANALYZEдля такой секционированной таблицы должна была также изменятьrelhassubclass, и это приводило к потере измененийreltuples.Исправление обработки полиморфных выходных аргументов для процедур (Том Лейн) §§
SQL-оператор
CALLне разрешал правильные типы данных для таких аргументов, что приводило к ошибкам вида «cannot display a value of type anyelement» (значение типа anyelement нельзя вывести) или даже к аварийным сбоям. (При этом операторCALLв PL/pgSQL работал правильно.)Исправление поведения стабильных функций, вызываемых из списка аргументов оператора
CALL(Том Лейн) §Если оператор
CALLнаходился в атомарном контексте (например, есть внешний блок транзакции), таким функциям передавался неправильный снимок, в результате чего они получали устаревшие значения строк, которые уже изменились с момента начала внешней транзакции.Обнаружение целочисленного переполнения в вычислениях
money(Джозеф Кошаков) §Никакие арифметические функции для типа
moneyранее не имели соответствующих проверок, поэтому при переполнении просто выдавали неверные результаты.Исправлено чрезмерно агрессивное ограничение аргумента масштаба в функциях
round(numeric)иtrunc(numeric)(Дин Рашид) §Эти функции ограничивали свой масштаб аргумента до +/-2000, но есть допустимые сценарии использования для больших значений: в таких случаях функции возвращали неверные результаты. Теперь предел диапазона ограничен только типом
numeric.Исправление результатов применения функции
pg_size_pretty()к наименьшему возможному значениюbigint(Джозеф Кошаков) §Предотвращение сбоя функции
pg_sequence_last_value()при использовании для нежурналируемых последовательностей на резервных серверах и во временных последовательностях других сеансов (Натан Боссарт) §Теперь вместо вывода ошибки в таких случаях возвращается NULL.
Исправление разбора игнорируемых операторов в функции
websearch_to_tsquery()(Том Лейн) §Согласно руководству, пунктуация во входных данных функции
websearch_to_tsquery()игнорируется, за исключением тире и кавычек в некоторых особых случаях. Однако скобки и некоторые другие символы, появляющиеся непосредственно передor, могли приводить к тому, чтоorрассматривался как обычное слово в данных, а не как операторOR.Обнаружение нового случая целочисленного переполнения при вычислении новых размерностей массива (Джозеф Кошаков) §
Применение размерностей
[-2147483648:2147483647]к пустому массиву отклоняется. Эта проблема тесно связана с CVE-2023-5869, но не является критичной, поскольку массив всё равно оказывается пустым.Обнаружение ещё одного случая устаревания новой записи в кеше каталога при распаковке (detoasting) полей (Ной Миш) §
Изменение на месте, происходящее при расширении отделённых полей в кортеже каталога, могло быть пропущено, что приводило к записи в кеше каталога, в которой отсутствует изменение на месте, но которая не является устаревшей. Это было возможно только в каталоге
pg_database, но могло вызывать неправильное поведение.Исправление проверки изменчивости столбцов представления для выражений
INSERT...DEFAULT(Том Лейн) §Если такой столбец является неизменяемым, должно было бы выдаваться сообщение об ошибке. Но проверка пропускалась, и затем в более позднем месте кода выдавалась бесполезная ошибка, например «attribute number
Nnot found in view targetlist» (атрибут номерNне найден в списке целей представления).Устранение вывода бесполезного сообщения о внутренней ошибке для некорректных рекурсивных запросов (Том Лейн) §
Порядок проверок ошибок был изменён так, чтобы ошибка выдавалась в точке, когда запрос
WITH RECURSIVEне ссылается на себя во второй ветвиUNION, но имеет одну ссылку на себя в каком-то другом месте, например вORDER BY.Блокировка принадлежащих таблице последовательностей во время выполнения
ALTER TABLE SET LOGGED|UNLOGGED(Ной Миш) §Эти команды изменяли режим журналирования принадлежащих таблице последовательностей вместе с таблицей, но при этом не запрашивали блокировку последовательностей. Это могло приводить к потере результатов одновременных вызовов
nextval().Предотвращение ошибок, если поставленный в очередь триггер
AFTERбольше не существует (Том Лейн) §Транзакция могла выполнять операцию, которая ставит в очередь отложенный триггер
AFTERдля последующего выполнения, а затем удалять триггер до его срабатывания. Раньше это приводило к странным ошибкам, таким как «could not find triggerNNNN» (не удалось найти триггерNNNN). Если триггер не существует в момент, когда он должен был сработать, логичнее, чтобы ничего не происходило, а не выдавалась ошибка.Устранение ошибки, из-за которой не удалялись записи
pg_init_privsдля прав на уровне столбцов при удалении их таблицы (Том Лейн) §Если расширение предоставляло определённые права на уровне столбцов для таблицы, которую оно создало, после удаления расширения оставались соответствующие записи каталога. Это было безвредно до тех пор, пока/если OID таблицы не переиспользовался для другого отношения и не вмешивался в результат работы pg_dump для этого отношения.
Исправление выбора решающего индекса для
ON CONFLICT, когда у нужного индекса есть выражения или предикаты (Том Лейн) §Если запрос с
ON CONFLICTобращался к целевой таблице через изменяемое представление, он мог завершиться ошибкой «there is no unique or exclusion constraint matching the ON CONFLICT specification» (нет уникального ограничения или ограничения-исключения, соответствующего указанию ON CONFLICT), даже если соответствующий индекс существует.Отклонение изменений временной таблицы другого сеанса с помощью
ALTER TABLE(Том Лейн) §Проверки разрешений обычно предотвращали возникновение таких случаев, но их можно было вызвать, изменив родительскую таблицу, дочерняя таблица которой является временной таблицей другого сеанса. Теперь, если обнаружено, что такая дочерняя таблица принадлежит другому сеансу, выдаётся ошибка.
Исправление обработки расширенной статистики для выражений в
CREATE TABLE LIKE STATISTICS(Том Лейн) §Команда
CREATEне могла настроить ссылки на столбцы в статистических выражениях для соответствия возможно отличающейся нумерации столбцов новой таблицы. Это приводило к появлению недействительных объектов статистики, которые впоследствии могли вызывать проблемы. Типичный сценарий, требующий перенумерации столбцов — наличие в исходной таблице удалённых столбцов.Устранение ошибки пересчёта подзапросов, сгенерированных агрегатными функциями
MIN()илиMAX()(Том Лейн) §В некоторых случаях результат агрегированной функции, вычисленный в одной строке внешнего запроса, мог быть повторно использован для последующих строк в неподходящих для этого сценариях. Это поведение обнаружилось при использовании во внешнем запросе предложения
DISTINCT, реализованного с помощью агрегации по хешу, но могут существовать и другие случаи.Предотвращение сбоев в случаях, когда встроенная JIT-компилятором функция вызывает ошибку (Том Лейн) §
Состояние ошибки могло включать указатели на динамически загруженный модуль, содержащий скомпилированный в JIT код (для строк расположения ошибок). В некоторых местах кода модуль мог выгружаться до обработки отчёта об ошибке, что приводило к SIGSEGV при обращении к строкам расположения.
Адаптация под изменения в поведении libxml2 версии 2.13.x (Эрик Винхольд, Том Лейн) §
В частности, теперь ошибки «chunk is not well balanced» (порция плохо сбалансирована) из libxml2 подавляются, только если это не единственная вызванная ошибка. Цель этого исправления — сделать сообщения об ошибках согласованными между 2.13.x и более ранними версиями libxml2. В более ранних версиях это сообщение почти всегда было избыточным или совершенно неверным, поэтому в версии 2.13.x существенно уменьшено количество случаев, в которых оно выводится.
Исправление обработки подтранзакций подготовленных транзакций при запуске сервера горячего резерва (Хейкки Линнакангас) §
При запуске воспроизведения резервным сервером записи WAL контрольной точки типа shutdown, транзакции, которые были подготовлены, но ещё не зафиксированы на ведущем сервере, правильно распознаются как выполняющиеся. Но подтранзакции подготовленной транзакции (созданные точками сохранения или блоками исключений PL/pgSQL) не учитывались и считались прерванными. Это приводило к несогласованности, если подготовленная транзакция затем фиксировалась.
Предотвращение неправильной инициализации слотов логической репликации (Масахико Савада) §
В некоторых случаях начальная точка слота репликации в потоке WAL могла устанавливаться на точку внутри транзакции, что приводило к сбоям проверочных утверждений или неверным результатам декодирования.
Устранение ошибки «can only drop stats once» (статистику можно удалить только один раз) во время создания и удаления слота репликации (Флорис Ван Ни) §
Устранение утечки ресурсов в процессе-передатчике WAL логической репликации (Хоу Чжицзе) §
В процессе walsender происходила утечка памяти при публикации изменений для секционированной таблицы, типы строк секций которой физически отличаются от типов строк секционированной таблицы.
Предотвращение утечки памяти после обслуживания прерывания notify или sinval (Том Лейн) §
Функции обработки для этих событий могли переключать текущий контекст памяти на TopMemoryContext, что приводило к утечке любых данных в рамках сеанса, которые были выделены до замены некорректного параметра. Были обнаружены утечки, связанные с (по крайней мере) преобразованием кодировки входящих запросов и параметров, прикреплённых к сообщениям Bind.
Предотвращение утечек счётчиков ссылок для блока общей памяти, используемого для сбора статистики (Антонин Боннефой) §
Новый серверный процесс, подключаемый к общей памяти статистики, увеличивал свой счётчик ссылок, но не мог уменьшить его при отключении. После создания 232 сеансов счётчик ссылок переполнялся до нуля, что приводило к сбоям при всех последующих запусках серверного процесса.
Предотвращение взаимоблокировок и сбоев проверочных утверждений во время усечения журнала мультитранзакций SLRU (Хейкки Линнакангас) §
Процесс, пытающийся удалить сегменты SLRU, мог вызвать взаимоблокировку с процессом контрольных точек.
Предотвращение возможной потери событий конца ввода для сокетов Windows (Томас Манро) §
Windows сообщал о событии FD_CLOSE только один раз после отключения удалённого конца соединения. Можно было пропустить этот отчёт и ждать бесконечно или, по крайней мере, пока не истечёт тайм-аут ожидания новых входных данных.
Устранение выхода за границу буфера в отчётах об ошибках разбора JSON для неполных байтовых последовательностей (Джейкоб Чемпион) §
Ранее был возможен выход за пределы входного буфера на несколько байт, когда последние байты содержали неполный многобайтный символ. Обычно это не вызывало проблем, но потенциально могло вызывать сбои.
Отключение создания сеансовых билетов TLS типа stateful с помощью OpenSSL (Даниэль Густафссон) § § §
Это исправление позволяет избежать возможных сбоев у клиентов, для которых получение сеансового билета означало, что поддерживается возобновление сеанса TLS.
Добавление проверки, что «простые выражения» PL/pgSQL остаются простыми при перепланировании (Том Лейн) §
В некоторых довольно искусственных случаях, например при удалении указываемой функции и её пересоздании в качестве агрегатной, могли возникать неожиданные сбои, такие как «unexpected plan node type» (неожиданный тип узла плана).
Исправление несовместимости с PL/Perl и Perl 5.40 (Эндрю Дунстан) §
Исправление рекурсивных функций PL/Python, возвращающих
RECORD(Том Лейн) §При рекурсивном переходе к новому вызову той же функции, передающей другой список определений столбцов (предложение
AS), происходил сбой, поскольку внутренний вызов перезаписывал информацию внешнего о том, какой тип строки следует возвращать.Устранение повреждений словаря
TDPL/Python во время рекурсивного вызова триггера (Том Лейн) §Если триггер языка PL/Python приводил к вызову другого триггера, словарь
TD, созданный для внутреннего триггера, перезаписывал словарьTDвнешнего.Устранение ошибки, из-за которой PL/Tcl сообщал о недопустимом синтаксисе списка в результате функции, возвращающей кортеж (Эрик Винхольд, Том Лейн) §
Такой случай мог приводить к сбою или к выдаче вводящей в заблуждение контекстной информации, которая на самом деле относилась к предыдущей ошибке Tcl.
Предотвращение небезопасного использования
strerror()в многопоточной среде в libpq (Питер Эйзентраут) §Некоторые сообщения об ошибках, выводимые OpenSSL, могли искажаться в многопоточных приложениях.
Предотвращение утечки памяти в pg_dump во время обновления в двоичном формате (Даниэль Густафссон) §
Гарантия корректного вывода зависимых записей TOC при использовании
pg_restoreс параметром-l(Том Лейн) §Если параметр
-lбыл указан вместе с параметрами выборочного восстановления, такими как-nили-N, зависимые записи TOC, например комментарии, исключались из списка, даже если должны были быть включены в фактическое восстановление.Устранение ошибки «cursor can only scan forward» (курсор может сканировать только вперёд) в
contrib/postgres_fdw(Эцуро Фудзита) §Эта ошибка могла возникать, если версия удалённого сервера была 15 или выше, и при этом внешняя таблица сопоставлялась с нетривиальным удалённым представлением.
Запрет отправления предложений
FETCH FIRST WITH TIESна удалённый сервер вcontrib/postgres_fdw(Япинь Ли) §Удалённый сервер мог не реализовать это условие или интерпретировать его иначе, чем это делалось локально, поэтому теперь удалённое выполнение отключено.
Предотвращение конфликтов с заголовками
<regex.h>, предоставляемыми системой (Томас Манро) §Это исправление устраняет ошибку компиляции в macOS версии 15 и выше.
Исправление сбоев проверочных утверждений в оценке стоимости Memoize (Дэвид Роули) §
Исправление сбоев проверочных утверждений в
REINDEX CONCURRENTLY, применяемых к индексу SP-GiST (Том Лейн) §
E.32. Release 15.8
Release date: 2024-08-08
This release contains a variety of fixes from 15.7. For information about new features in major release 15, see Section E.40.
E.32.1. Migration to Version 15.8
A dump/restore is not required for those running 15.X.
However, if you are upgrading from a version earlier than 15.7, see Section E.33.
E.32.2. Changes
Prevent unauthorized code execution during pg_dump (Masahiko Sawada) §
An attacker able to create and drop non-temporary objects could inject SQL code that would be executed by a concurrent pg_dump session with the privileges of the role running pg_dump (which is often a superuser). The attack involves replacing a sequence or similar object with a view or foreign table that will execute malicious code. To prevent this, introduce a new server parameter
restrict_nonsystem_relation_kindthat can disable expansion of non-builtin views as well as access to foreign tables, and teach pg_dump to set it when available. Note that the attack is prevented only if both pg_dump and the server it is dumping from are new enough to have this fix.The PostgreSQL Project thanks Noah Misch for reporting this problem. (CVE-2024-7348)
Prevent infinite loop in
VACUUM(Melanie Plageman) §After a disconnected standby server with an old running transaction reconnected to the primary, it was possible for
VACUUMon the primary to get confused about which tuples are removable, resulting in an infinite loop.Fix failure after attaching a table as a partition, if the table had previously had inheritance children (Álvaro Herrera) §
Fix
ALTER TABLE DETACH PARTITIONfor cases involving inconsistent index-based constraints (Álvaro Herrera, Tender Wang) § §When a partitioned table has an index that is not associated with a constraint, but a partition has an equivalent index that is, then detaching the partition would misbehave, leaving the ex-partition's constraint with an incorrect
coninhcountvalue. This would cause trouble during any further manipulations of that constraint.Fix partition pruning setup during
ALTER TABLE DETACH PARTITION CONCURRENTLY(Álvaro Herrera) § §The executor assumed that no partition could be detached between planning and execution of a query on a partitioned table. This is no longer true since the introduction of
DETACH PARTITION'sCONCURRENTLYoption, making it possible for query execution to fail transiently when that is used.Correctly update a partitioned table's
pg_class.reltuplesfield to zero after its last child partition is dropped (Noah Misch) §The first
ANALYZEon such a partitioned table must updaterelhassubclassas well, and that caused thereltuplesupdate to be lost.Fix handling of polymorphic output arguments for procedures (Tom Lane) § §
The SQL
CALLstatement did not resolve the correct data types for such arguments, leading to errors such as “cannot display a value of type anyelement”, or even outright crashes. (ButCALLin PL/pgSQL worked correctly.)Fix behavior of stable functions called from a
CALLstatement's argument list (Tom Lane) §If the
CALLis within an atomic context (e.g. there's an outer transaction block), such functions were passed the wrong snapshot, causing them to see stale values of rows modified since the start of the outer transaction.Detect integer overflow in
moneycalculations (Joseph Koshakow) §None of the arithmetic functions for the
moneytype checked for overflow before, so they would silently give wrong answers for overflowing cases.Fix over-aggressive clamping of the scale argument in
round(numeric)andtrunc(numeric)(Dean Rasheed) §These functions clamped their scale argument to +/-2000, but there are valid use-cases for it to be larger; the functions returned incorrect results in such cases. Instead clamp to the actual allowed range of type
numeric.Fix result for
pg_size_pretty()when applied to the smallest possiblebigintvalue (Joseph Koshakow) §Prevent
pg_sequence_last_value()from failing on unlogged sequences on standby servers and on temporary sequences of other sessions (Nathan Bossart) §Make it return NULL in these cases instead of throwing an error.
Fix parsing of ignored operators in
websearch_to_tsquery()(Tom Lane) §Per the manual, punctuation in the input of
websearch_to_tsquery()is ignored except for the special cases of dashes and quotes. However, parentheses and a few other characters appearing immediately before anorcould causeorto be treated as a data word, rather than as anORoperator as expected.Detect another integer overflow case while computing new array dimensions (Joseph Koshakow) §
Reject applying array dimensions
[-2147483648:2147483647]to an empty array. This is closely related to CVE-2023-5869, but appears harmless since the array still ends up empty.Detect another case of a new catalog cache entry becoming stale while detoasting its fields (Noah Misch) §
An in-place update occurring while we expand out-of-line fields in a catalog tuple could be missed, leading to a catalog cache entry that lacks the in-place change but is not known to be stale. This is only possible in the
pg_databasecatalog, so the effects are narrow, but misbehavior is possible.Correctly check updatability of view columns targeted by
INSERT...DEFAULT(Tom Lane) §If such a column is non-updatable, we should give an error reporting that. But the check was missed and then later code would report an unhelpful error such as “attribute number
Nnot found in view targetlist”.Avoid reporting an unhelpful internal error for incorrect recursive queries (Tom Lane) §
Rearrange the order of error checks so that we throw an on-point error when a
WITH RECURSIVEquery does not have a self-reference within the second arm of theUNION, but does have one self-reference in some other place such asORDER BY.Lock owned sequences during
ALTER TABLE SET LOGGED|UNLOGGED(Noah Misch) §These commands change the persistence of a table's owned sequences along with the table, but they failed to acquire lock on the sequences while doing so. This could result in losing the effects of concurrent
nextval()calls.Don't throw an error if a queued
AFTERtrigger no longer exists (Tom Lane) §It's possible for a transaction to execute an operation that queues a deferred
AFTERtrigger for later execution, and then to drop the trigger before that happens. Formerly this led to weird errors such as “could not find triggerNNNN”. It seems better to silently do nothing if the trigger no longer exists at the time when it would have been executed.Fix failure to remove
pg_init_privsentries for column-level privileges when their table is dropped (Tom Lane) §If an extension grants some column-level privileges on a table it creates, relevant catalog entries would remain behind after the extension is dropped. This was harmless until/unless the table's OID was re-used for another relation, when it could interfere with what pg_dump dumps for that relation.
Fix selection of an arbiter index for
ON CONFLICTwhen the desired index has expressions or predicates (Tom Lane) §If a query using
ON CONFLICTaccesses the target table through an updatable view, it could fail with “there is no unique or exclusion constraint matching the ON CONFLICT specification”, even though a matching index does exist.Refuse to modify a temporary table of another session with
ALTER TABLE(Tom Lane) §Permissions checks normally would prevent this case from arising, but it is possible to reach it by altering a parent table whose child is another session's temporary table. Throw an error if we discover that such a child table belongs to another session.
Fix handling of extended statistics on expressions in
CREATE TABLE LIKE STATISTICS(Tom Lane) §The
CREATEcommand failed to adjust column references in statistics expressions to the possibly-different column numbering of the new table. This resulted in invalid statistics objects that would cause problems later. A typical scenario where renumbering columns is needed is when the source table contains some dropped columns.Fix failure to recalculate sub-queries generated from
MIN()orMAX()aggregates (Tom Lane) §In some cases the aggregate result computed at one row of the outer query could be re-used for later rows when it should not be. This has only been seen to happen when the outer query uses
DISTINCTthat is implemented with hash aggregation, but other cases may exist.Avoid crashing when a JIT-inlined backend function throws an error (Tom Lane) §
The error state can include pointers into the dynamically loaded module holding the JIT-compiled code (for error location strings). In some code paths the module could get unloaded before the error report is processed, leading to SIGSEGV when the location strings are accessed.
Cope with behavioral changes in libxml2 version 2.13.x (Erik Wienhold, Tom Lane) §
Notably, we now suppress “chunk is not well balanced” errors from libxml2, unless that is the only reported error. This is to make error reports consistent between 2.13.x and earlier libxml2 versions. In earlier versions, that message was almost always redundant or outright incorrect, so 2.13.x substantially reduced the number of cases in which it's reported.
Fix handling of subtransactions of prepared transactions when starting a hot standby server (Heikki Linnakangas) §
When starting a standby's replay at a shutdown checkpoint WAL record, transactions that had been prepared but not yet committed on the primary are correctly understood as being still in progress. But subtransactions of a prepared transaction (created by savepoints or PL/pgSQL exception blocks) were not accounted for and would be treated as aborted. That led to inconsistency if the prepared transaction was later committed.
Prevent incorrect initialization of logical replication slots (Masahiko Sawada) §
In some cases a replication slot's start point within the WAL stream could be set to a point within a transaction, leading to assertion failures or incorrect decoding results.
Avoid “can only drop stats once” error during replication slot creation and drop (Floris Van Nee) §
Fix resource leakage in logical replication WAL sender (Hou Zhijie) §
The walsender process leaked memory when publishing changes to a partitioned table whose partitions have row types physically different from the partitioned table's.
Avoid memory leakage after servicing a notify or sinval interrupt (Tom Lane) §
The processing functions for these events could switch the current memory context to TopMemoryContext, resulting in session-lifespan leakage of any data allocated before the incorrect setting gets replaced. There were observable leaks associated with (at least) encoding conversion of incoming queries and parameters attached to Bind messages.
Prevent leakage of reference counts for the shared memory block used for statistics (Anthonin Bonnefoy) §
A new backend process attaching to the statistics shared memory incremented its reference count, but failed to decrement the count when exiting. After 232 sessions had been created, the reference count would overflow to zero, causing failures in all subsequent backend process starts.
Prevent deadlocks and assertion failures during truncation of the multixact SLRU log (Heikki Linnakangas) §
A process trying to delete SLRU segments could deadlock with the checkpointer process.
Avoid possibly missing end-of-input events on Windows sockets (Thomas Munro) §
Windows reports an FD_CLOSE event only once after the remote end of the connection disconnects. With unlucky timing, we could miss that report and wait indefinitely, or at least until a timeout elapsed, expecting more input.
Fix buffer overread in JSON parse error reports for incomplete byte sequences (Jacob Champion) §
It was possible to walk off the end of the input buffer by a few bytes when the last bytes comprise an incomplete multi-byte character. While usually harmless, in principle this could cause a crash.
Disable creation of stateful TLS session tickets by OpenSSL (Daniel Gustafsson) § § §
This avoids possible failures with clients that think receipt of a session ticket means that TLS session resumption is supported.
When replanning a PL/pgSQL “simple expression”, check it's still simple (Tom Lane) §
Certain fairly-artificial cases, such as dropping a referenced function and recreating it as an aggregate, could lead to surprising failures such as “unexpected plan node type”.
Fix incompatibility between PL/Perl and Perl 5.40 (Andrew Dunstan) §
Fix recursive
RECORD-returning PL/Python functions (Tom Lane) §If we recurse to a new call of the same function that passes a different column definition list (
ASclause), it would fail because the inner call would overwrite the outer call's idea of what rowtype to return.Don't corrupt PL/Python's
TDdictionary during a recursive trigger call (Tom Lane) §If a PL/Python-language trigger caused another one to be invoked, the
TDdictionary created for the inner one would overwrite the outer one'sTDdictionary.Fix PL/Tcl's reporting of invalid list syntax in the result of a function returning tuple (Erik Wienhold, Tom Lane) §
Such a case could result in a crash, or in emission of misleading context information that actually refers to the previous Tcl error.
Avoid non-thread-safe usage of
strerror()in libpq (Peter Eisentraut) §Certain error messages returned by OpenSSL could become garbled in multi-threaded applications.
Avoid memory leak within pg_dump during a binary upgrade (Daniel Gustafsson) §
Ensure that
pg_restore-lreports dependent TOC entries correctly (Tom Lane) §If
-lwas specified together with selective-restore options such as-nor-N, dependent TOC entries such as comments would be omitted from the listing, even when an actual restore would have selected them.Avoid “cursor can only scan forward” error in
contrib/postgres_fdw(Etsuro Fujita) §This error could occur if the remote server is v15 or later and a foreign table is mapped to a non-trivial remote view.
In
contrib/postgres_fdw, do not sendFETCH FIRST WITH TIESclauses to the remote server (Japin Li) §The remote server might not implement this clause, or might interpret it differently than we would locally, so don't risk attempting remote execution.
Avoid clashing with system-provided
<regex.h>headers (Thomas Munro) §This fixes a compilation failure on macOS version 15 and up.
Fix otherwise-harmless assertion failure in Memoize cost estimation (David Rowley) §
Fix otherwise-harmless assertion failures in
REINDEX CONCURRENTLYapplied to an SP-GiST index (Tom Lane) §