E.34. Выпуск 15.6
Дата выпуска: 2024-02-08
В этот выпуск вошли различные исправления, внесённые после версии 15.5. За информацией о нововведениях версии 15 обратитесь к Разделу E.40.
E.34.1. Миграция на версию 15.6
Если используется версия 15.X, выгрузка/восстановление базы не требуется.
Однако была исправлена одна ошибка, потенциально приводившая к повреждению индексов GIN при одновременных изменениях. После установки этого обновления рекомендуется перестроить возможно повреждённые индексы.
Однако если вы обновляете сервер с более ранней версии, чем 15.5, см. Раздел E.35.
E.34.2. Изменения
Усиление ограничений безопасности команды
REFRESH MATERIALIZED VIEW CONCURRENTLY(Хейкки Линнакангас) § §Один из шагов команды параллельного обновления выполнялся со слабыми ограничениями безопасности. Если владелец материализованного представления убеждал суперпользователя или другого пользователя с расширенными правами выполнить параллельное обновление этого представления, владелец представления мог контролировать код, выполняемый с правами пользователя, который запускал команду
REFRESH. Уязвимость устранена, теперь весь пользовательский код запускается от имени владельца представления, как и предполагается.Поскольку единственный известный способ использования уязвимости не работает в PostgreSQL 16.0 и более поздних версиях, предполагается, что на практике версия 16 не подвержена ей.
Проект PostgreSQL благодарит Педро Гальегоса за сообщение об этой проблеме. (CVE-2024-0985)
Устранение утечки памяти при выполнении встраивания JIT (Андрес Фройнд, Даниэль Густафссон) §
Неоднократно сообщалось о том, что серверные процессы страдают от нехватки памяти после достаточно большого количества JIT-компиляций. Данное исправление должно решить эту проблему.
Устранение необходимости поиска в списке ожидающих процессов при исключении из очереди LWLock (Андрес Фройнд) §
Это улучшение исправляет поведение O(N^2) при большом списке ожидания, что в некоторых случаях также приводит к существенному повышению пропускной способности.
Предотвращение создания некорректных планов соединения секций (Ричард Гуо) §
Некоторые необычные ситуации, связанные с ссылками LATERAL, могли приводить к созданию некорректных планов. При этом могли выдаваться неверные результаты или вызываться странные ошибки, такие как «variable not found in subplan target list» (переменная не найдена в целевом списке подплана), или сбой исполнителя.
Устранение неправильного обёртывания выходных выражений подзапроса в PlaceHolderVar (Том Лейн) §
Исправление исключает получение неправильных результаты, когда подзапрос находится под внешним объединением и в нём есть выходной столбец, который ссылается в LATERAL на что-то за пределами области внешнего соединения. Из-за действий внешнего соединения выходной столбец мог не отображаться как NULL, когда должен был.
Устранение неправильной обработки условий запуска оконных функций (Ричард Гуо) §
Неправильная обработка могла приводить к ошибкам «WindowFunc not found in subplan target lists» (оконная функция не найдена в целевом списке подплана).
Пропуск недопустимых действий при межсекционных изменениях, вызванных командой
MERGE(Дин Рашид) §Если при выполнении действия
MERGE UPDATEдля секционированной таблицы операцияUPDATEпревращается вDELETEиINSERTиз-за изменения столбца ключа секционирования, то теперь пропускается запуск триггеровAFTER UPDATE ROW, а также другие действия после обновления, например проверки RLS. Эти действия обычно завершались ошибкой, поэтому обычное действиеUPDATEне выполняло их в таких случаях, иMERGEтеперь тоже не будет.Правильная обработка триггеров
BEFORE ROW DELETEпри межсекционных изменениях, выполняемых командойMERGE(Дин Рашид) §Если такой триггер пытался предотвратить изменение, возвращая NULL, при выполнении команды
MERGEвозникала ошибка или сбой проверочного утверждения.Недопущение обращения к разделяемому буферу в триггерах
BEFORE ROW UPDATE(Александр Лахин, Том Лейн) §Если обновляемый кортеж был только что обновлён и перемещён на другую страницу в рамках другого сеанса, появлялось узкое окно, в котором происходили попытки получить данные из новой версии кортежа без какого-либо закрепления буфера этого сеанса. В принципе это могло приводить к появлению мусорных данных в неизменённых столбцах предлагаемого нового кортежа. Однако вероятность возникновения проблем на практике крайне мала.
Предотвращение запроса слишком большого размера разделяемой памяти при параллельном хеш-соединении (Томас Манро, Андрей Лепихов, Александр Коротков) § §
Ограничивающее значение было слишком большим, что приводило к возникновению ошибок «invalid DSA memory alloc request size» (недопустимый запрошенный размер разделяемой памяти DSA) при достаточно больших ожидаемых размерах хеш-таблицы.
Предотвращение сбоев проверочных утверждений в функциях
heap_update()иheap_delete()в случаях, когда кортеж, обновляемый триггером обеспечения целостности внешнего ключа, не проходит дополнительную перекрёстную проверку видимости (Александр Лахин) §Эта ошибка не влияла на сборки без проверочных утверждений.
Исправление слишком строгого проверочного утверждения для параметра
false_positive_rateв классах операторов BRIN bloom (Александр Лахин) §Эта ошибка не влияла на сборки без проверочных утверждений.
Устранение возможного сбоя при выполнении команды
ALTER TABLE ADD COLUMNдля сложного дерева наследования (Тендер Ван) §Если дочерняя таблица наследовала новый столбец через несколько промежуточных родителей, команда завершалась ошибкой «tuple already updated by self» (кортеж уже изменился сам).
Устранение проблем с повторяющимися именами фрагментов в командах
ALTER TEXT SEARCH CONFIGURATION... MAPPING(Тендер Ван, Микаэль Пакье) §Корректное получение блокировки связанной таблицы при выполнении команды
DROP STATISTICS(Томаш Вондра) §Невозможность получить блокировку могла приводить к ошибкам «tuple concurrently deleted» (одновременное удаление кортежей), если команда
DROPвыполнялась одновременно с командойANALYZE.Исправление проверки изменчивости функций для выражений
GENERATEDиDEFAULT(Том Лейн). §Вставка выражений аргумента по умолчанию изменчивой функции могла игнорироваться, или полиморфная функция могла восприниматься как изменчивая, хотя на самом деле являлась постоянной для необходимого типа данных. Это могло приводить к неправильному отклонению или принятию предложения
GENERATEDили к ошибочному применению оптимизации постоянного значения по умолчанию вALTER TABLE ADD COLUMN.Обнаружение устаревания новой записи в кеше каталога при распаковке полей (Том Лейн) § §
Все поля отдельно хранящихся строк расширяются в кортеже каталога перед его вставкой в кеш каталога. Эти действия предполагают доступ к базе данных, который может приводить к аннулированию записей кеша каталога. При этом раньше новая запись не находилась в кеше, из-за чего она не становилась недействительной. В результате появлялись условия гонки, при которых уже устаревшая запись в кеше могла создаваться, а затем сохраняться неопределённо долго. Это приводило к труднопрогнозируемому некорректному поведению. Теперь видимость кортежа перепроверяется после распаковки.
Устранена ошибка обнаружения целочисленного переполнения в особых случаях на некоторых платформах (Дин Рашид) §
Вычисление
0 - INT64_MINдолжно вызывать ошибку переполнения, что и происходит на большинстве платформ. Однако платформы, не имеющие ни встроенного целочисленного переполнения, ни 128-битных целых чисел, не могли обнаружить переполнение и вместо вызова ошибки вычислялиINT64_MIN.Обнаружение переполнения юлианской даты при добавлении значений типа
intervalк значениям типаtimestampили вычитании первых из вторых (Том Лейн) §В некоторых случаях, которые должны вызывать ошибку выхода за пределы допустимого диапазона, вместо этого выдавался неверный результат.
Добавление дополнительных проверок на переполнение в функциях
interval_mul()иinterval_div()(Дин Рашид) §В некоторых случаях, которые должны вызывать ошибку выхода за пределы допустимого диапазона, вместо этого выдавался неверный результат.
Удаление данных кешированной статистики после изменения переменной
stats_fetch_consistency(Синъя Като) §В некоторых местах кода были попытки возвращать устаревшую статистику.
Обеспечение проверки допустимости неприменяемых значений для параметров с контекстом
backendилиsuperuser-backendв представленииpg_file_settings(Том Лейн) §Недопустимые значения не отмечались в представлении должным образом. Это упущение было трудно обнаружить, поскольку в данных группах очень мало параметров.
Сопоставление правил сортировки при сопоставлении существующего индекса с новым секционированным индексом (Питер Эйзентраут) §
Ранее как соответствующий мог приниматься индекс, правила сортировки которого отличаются от соответствующего элемента ключа секционирования, что могло приводить к неправильному поведению.
Предотвращение сбоя при удалении дочернего индекса одновременно с выполнением команды
REINDEX INDEXдля секционированного индекса (Фей Чанхун) §Исправление недостаточной блокировки при неполном разделении части внутренней страницы индекса GIN (Фей Чанхун, Хейкки Линнакангас) §
В коде использовалась общая, а не эксклюзивная блокировка буфера. Это могло приводить к повреждению индекса, если два процесса пытались выполнить очистку одновременно.
Предотвращение преждевременного освобождения закрепления буфера при вставке индекса GIN (Том Лейн) §
Если разделение корневой страницы индекса происходило одновременно с пользовательской вставкой, выполнение кода могло завершаться ошибкой «buffer NNNN is not owned by resource owner» (буфер NNNN не принадлежит владельцу ресурса).
Предотвращение сбоев при использовании секционированных индексов SP-GiST (Том Лейн) §
Попытка использовать индекс такого типа могла приводить к ошибкам «No such file or directory» (Нет такого файла или каталога).
Исправление отчётов об изменении владельца для больших объектов (Том Лейн) §
Ничего не делающая команда
ALTER LARGE OBJECT OWNER(то есть команда, выбирающая существующего владельца) передавала неправильный идентификатор класса вPostAlterHook, что могло вызывать нарушения в работе любого расширения, использующего этот обработчик.Исправление отчётов о данных времени ввода-вывода в
EXPLAIN (BUFFERS)(Микаэль Пакье) §Значения, помеченные как «shared/local» (общие/локальные), на самом деле относятся только к общим буферам, поэтому эта метка была изменена на «shared» (общие).
Обеспечение надёжности команды
CREATE DATABASE(Ной Миш) §§При сбое операционной системы во время или вскоре после выполнения команды
CREATE DATABASEвосстановление или последующие подключения к новой базе данных могли завершаться ошибкой. Если в этом временном окне была создана базовая резервная копия, при попытке её использовать могли наблюдаться аналогичные проблемы. При этом каталог базы данных, файлPG_VERSIONили файлpg_filenode.mapмогли быть пустыми или отсутствовать.Запись в журнал дополнительных сообщений
LOGпри запуске и завершении восстановления из резервной копии (Андрес Фройнд) §Это изменение вносит дополнительную информацию в журнал управляющего процесса postmaster, которая может быть полезна для диагностики проблем при восстановлении.
Предотвращение неправильной обработки «мёртвых» индексных кортежей во время подтранзакций на резервных серверах (Фей Чанхун) §
Флаг
startedInRecoveryбыл неправильно задан для подтранзакций. Это влияло только на обработку «мёртвых» индексных кортежей и могло позволить запросу в подтранзакции игнорировать записи индекса, которые он должен возвращать (если они уже «мертвы» на ведущем сервере, но не «мертвы» для транзакции на резервном), или преждевременно помечать на резервном сервере «мёртвыми» такие записи, которые ещё не являются «мёртвыми» на ведущем. Неясно, приводил ли последний случай к каким-либо серьёзным последствиям, но предполагалось другое поведение.Устранение риска целочисленного переполнения при проверке того, поместится ли запись в буфер декодирования WAL (Томас Манро) §
Эта ошибка, по-видимому, являлась скрытой, за исключением случаев запуска 32-битной сборки PostgreSQL на 64-битной платформе.
Устранение взаимоблокировок между процессом применения изменений логической репликации, процессом tablesync и процессом сеанса, пытающимся изменить подписку (Шлок Кьял) §
На одной из сторон цикла взаимоблокировки не включалось ожидание блокировки, поэтому взаимоблокировка оставалась незамеченной, что требовало ручного вмешательства.
Обеспечение корректной передачи значений столбцов по умолчанию подключаемым модулем логической репликации pgoutput (Никхил Бенеш) §
Команда
ALTER TABLE ADD COLUMNс постоянным значением по умолчанию для нового столбца не перезаписывает существующие кортежи, вместо этого предполагается, что при чтении будет вставлено правильное значение по умолчанию в кортеж, в котором отсутствует этот столбец. Если впоследствии для таблицы была инициирована репликация, pgoutput передавал NULL вместо правильного значения по умолчанию для такого столбца, что могло нарушить репликацию на подписчике.Устранение сбоя начальной синхронизации логической репликации для таблицы без столбцов (Вигнеш Си) §
При таком сбое команда
COPYсоздавалась в некорректном формате.Предотвращение обращения к системным каталогам с использованием неверного снимка во время логического декодирования (Фей Чанхун) §
Если декодирование начиналось посреди транзакции, изменяющей системные каталоги, это могло остаться незамеченным, и поиск по каталогу при декодировании производился без учёта данной транзакции. Данное исправление касается случаев, когда транзакция верхнего уровня уже помечена как содержащая изменения каталога, а её подтранзакции — нет.
Возвращение правильного кода состояния, когда новый клиент отключается, не отвечая на запрос пароля сервером (Лю Ланг, Том Лейн) §
В некоторых случаях эта ситуация рассматривалась как регистрируемая ошибка, что не планировалось и приводило к созданию лишних сообщений в журналах, поскольку обычные клиенты, такие как psql, часто отключались. Это также могло нарушать работу расширений, использующих
ClientAuthentication_hook.Исправление несовместимости с OpenSSL 3.2 (Тристан Партин, Бо Андресон) §
Раньше предполагалось, что для частного хранилища можно использовать поле «data», что не вызывало проблем, но в версии 3.2 приводило к сбоям и сообщениям о двойном освобождении. Теперь используется поле BIO «app_data».
Особое внимание к случаям, когда OpenSSL не устанавливает
errnoпри возникновении ошибки (Том Лейн) §Теперь, если
errnoне установлен, предполагается, что причиной сообщения о сбое является чтение признака конца файла. Это исправление устраняет редкие случаи странных сообщений об ошибках, таких как «could not accept SSL connection: Success» (не удалось принять SSL-соединение: Успех).Устранение утечки файлового дескриптора при сбое функции обёртки сторонних данных
ForeignAsyncRequest(Хейкки Линнакангас) §Сообщение об ошибках ENOMEM из системных вызовов, связанных с файлами, в виде
ERRCODE_OUT_OF_MEMORY, а неERRCODE_INTERNAL_ERROR(Александр Кузьменков) §Поддержка SQL-команд типа
CREATE FUNCTION/CREATE PROCEDUREс телами по стандарту SQL в PL/pgSQL (Том Лейн) §Ранее выполнение таких команд завершалось сбоем из-за ошибок разбора, вызванных появлением точек с запятой в теле функции.
Исправление обработки ошибок в конвейерах библиотекой libpq (Альваро Эррера) § §
Состояние конвейера могло рассинхронизироваться, если ошибка возвращалась не из-за проблем с запросом (например, при потере соединения). Потенциально это могло приводить к возникновению цикла с ожиданием в вызывающем приложении.
Обеспечение сброса буфера вывода клиента функцией libpq
PQsendFlushRequest()по тем же правилам, что и другие функцииPQsend(Йелте Феннема-Нио) §В конвейерном режиме всё равно может потребоваться вызов функции
PQflush(), но это изменение устраняет ранее существовавшую несогласованность.Устранение условий гонки при инициализации библиотекой libpq поддержки OpenSSL одновременно в двух разных потоках (Вилли Манн, Микаэль Пакье) §
Устранение сбоя с зависимостью от времени при передаче данных GSSAPI (Том Лейн) §
При использовании шифрования GSSAPI в неблокирующем режиме библиотека libpq иногда выдавала ошибку «GSSAPI caller failed to retransmit all data needing to be retried» (вызывающей стороне GSSAPI не удалось повторно передать все необходимые данные).
Исключение выгрузки в pg_dump политик RLS или меток безопасности для объектов, являющихся членами расширения (Том Лейн, Джейкоб Чемпион) § §
Раньше в выгрузку включались команды для установки этих параметров, что неверно, поскольку их следует рассматривать как внутренние команды расширения. Более того, проводящий восстановление пользователь мог не иметь достаточных прав для их установки, а пользователь, производящий выгрузку, может не иметь достаточных прав для их выгрузки (поскольку для выгрузки политик RLS требуется получение блокировки для их таблицы).
Исключение выгрузки объекта расширенной статистики в pg_dump, если нижележащая для него таблица не выгружается (Райан Макгуайр, Том Лейн) §
Такое поведение соответствует поведению других зависимых объектов, таких как индексы.
Добавление ошибки для случая, когда по завершении скрипта pgbench конвейер остаётся открытым (Антонин Боннефой) §
Раньше pgbench демонстрировал некорректное поведение, если команде
\startpipelineне хватало соответствующего\endpipeline. Данный случай похож на ошибку скрипта, а не на рядовую ситуацию для продолжения работы pgbench, поэтому теперь выдаётся ошибка.Устранения сбоя в
contrib/intarrayв случаях, когда массив с элементом, равнымINT_MAX, вставлялся в индексgist__int_ops(Александр Лахин, Том Лейн) §Повышение информативности сообщений об ошибках при применении функции
hash_bitmap_info()contrib/pageinspectк секционированному хеш-индексу (Александр Лахин, Микаэль Пакье) §Повышение информативности сообщений об ошибках при применении функции
pgstathashindex()contrib/pgstattupleк секционированному хеш-индексу (Александр Лахин) §Отключение в Windows параметров автозапуска при запуске подпроцессов в pg_ctl и pg_regress (Кётаро Хоригути) § §
При запуске дочернего процесса через
cmd.exeтеперь передаётся флаг/D, чтобы предотвратить выполнение любых команд автозапуска, указанных в реестре. Это позволяет избежать возможных непредвиденных побочных эффектов.Перенос функции
is_valid_ascii()изmb/pg_wchar.hвutils/ascii.h(Джубили Янг) §Это изменение позволяет не включать
<simd.h>вpg_wchar.h, что ранее вызывало проблемы для некоторого стороннего кода.Устранение ошибок компиляции с libxml2 версии 2.12.0 или новее (Том Лейн) §
Устранение ошибок компиляции кода
WAL_DEBUGв Windows (Бхарат Рупиредди) §Подавление предупреждений компилятора о конструкциях в заголовочных файлах Python (Питер Эйзентраут, Том Лейн) §
При использовании предпочтительных параметров компилятора выдаются предупреждения о конструкциях, появляющихся в последних версиях заголовочных файлов Python. При использовании gcc эти предупреждения можно подавить с помощью указаний pragma.
Исключение предупреждений об устаревании при компиляции с использованием LLVM 18 (Томас Манро) §
Обновление данных часовых поясов до версии tzdata 2024a, включающее изменение правил перехода на летнее время в Гренландии, Казахстане и Палестине, исправления для антарктических станций Кейси и «Восток», а также корректировку исторических данных для Вьетнама, Торонто и Микелона. §
E.34. Release 15.6
Release date: 2024-02-08
This release contains a variety of fixes from 15.5. For information about new features in major release 15, see Section E.40.
E.34.1. Migration to Version 15.6
A dump/restore is not required for those running 15.X.
However, one bug was fixed that could have resulted in corruption of GIN indexes during concurrent updates. If you suspect such corruption, reindex affected indexes after installing this update.
Also, if you are upgrading from a version earlier than 15.5, see Section E.35.
E.34.2. Changes
Tighten security restrictions within
REFRESH MATERIALIZED VIEW CONCURRENTLY(Heikki Linnakangas) § §One step of a concurrent refresh command was run under weak security restrictions. If a materialized view's owner could persuade a superuser or other high-privileged user to perform a concurrent refresh on that view, the view's owner could control code executed with the privileges of the user running
REFRESH. Fix things so that all user-determined code is run as the view's owner, as expected.The only known exploit for this error does not work in PostgreSQL 16.0 and later, so it may be that v16 is not vulnerable in practice.
The PostgreSQL Project thanks Pedro Gallegos for reporting this problem. (CVE-2024-0985)
Fix memory leak when performing JIT inlining (Andres Freund, Daniel Gustafsson) §
There have been multiple reports of backend processes suffering out-of-memory conditions after sufficiently many JIT compilations. This fix should resolve that.
When dequeueing from an LWLock, avoid needing to search the list of waiting processes (Andres Freund) §
This fixes O(N^2) behavior when the list of waiters is long. In some use-cases this results in substantial throughput improvements.
Avoid generating incorrect partitioned-join plans (Richard Guo) §
Some uncommon situations involving lateral references could create incorrect plans. Affected queries could produce wrong answers, or odd failures such as “variable not found in subplan target list”, or executor crashes.
Fix incorrect wrapping of subquery output expressions in PlaceHolderVars (Tom Lane) §
This fixes incorrect results when a subquery is underneath an outer join and has an output column that laterally references something outside the outer join's scope. The output column might not appear as NULL when it should do so due to the action of the outer join.
Fix misprocessing of window function run conditions (Richard Guo) §
This oversight could lead to “WindowFunc not found in subplan target lists” errors.
Skip inappropriate actions when
MERGEcauses a cross-partition update (Dean Rasheed) §When executing a
MERGE UPDATEaction on a partitioned table, if theUPDATEis turned into aDELETEandINSERTdue to changing a partition key column, skip firingAFTER UPDATE ROWtriggers, as well as other post-update actions such as RLS checks. These actions would typically fail, which is why a regularUPDATEdoesn't do them in such cases;MERGEshouldn't either.Cope with
BEFORE ROW DELETEtriggers in cross-partitionMERGEupdates (Dean Rasheed) §If such a trigger attempted to prevent the update by returning NULL,
MERGEwould suffer an error or assertion failure.Prevent access to a no-longer-pinned buffer in
BEFORE ROW UPDATEtriggers (Alexander Lakhin, Tom Lane) §If the tuple being updated had just been updated and moved to another page by another session, there was a narrow window where we would attempt to fetch data from the new tuple version without any pin on its buffer. In principle this could result in garbage data appearing in non-updated columns of the proposed new tuple. The odds of problems in practice seem rather low, however.
Avoid requesting an oversize shared-memory area in parallel hash join (Thomas Munro, Andrei Lepikhov, Alexander Korotkov) § §
The limiting value was too large, allowing “invalid DSA memory alloc request size” errors to occur with sufficiently large expected hash table sizes.
Avoid assertion failures in
heap_update()andheap_delete()when a tuple to be updated by a foreign-key enforcement trigger fails the extra visibility crosscheck (Alexander Lakhin) §This error had no impact in non-assert builds.
Fix overly tight assertion about
false_positive_rateparameter of BRIN bloom operator classes (Alexander Lakhin) §This error had no impact in non-assert builds, either.
Fix possible failure during
ALTER TABLE ADD COLUMNon a complex inheritance tree (Tender Wang) §If a grandchild table would inherit the new column via multiple intermediate parents, the command failed with “tuple already updated by self”.
Fix problems with duplicate token names in
ALTER TEXT SEARCH CONFIGURATION ... MAPPINGcommands (Tender Wang, Michael Paquier) §Properly lock the associated table during
DROP STATISTICS(Tomas Vondra) §Failure to acquire the lock could result in “tuple concurrently deleted” errors if the
DROPexecutes concurrently withANALYZE.Fix function volatility checking for
GENERATEDandDEFAULTexpressions (Tom Lane) §These places could fail to detect insertion of a volatile function default-argument expression, or decide that a polymorphic function is volatile although it is actually immutable on the datatype of interest. This could lead to improperly rejecting or accepting a
GENERATEDclause, or to mistakenly applying the constant-default-value optimization inALTER TABLE ADD COLUMN.Detect that a new catalog cache entry became stale while detoasting its fields (Tom Lane) § §
We expand any out-of-line fields in a catalog tuple before inserting it into the catalog caches. That involves database access which might cause invalidation of catalog cache entries — but the new entry isn't in the cache yet, so we would miss noticing that it should get invalidated. The result is a race condition in which an already-stale cache entry could get made, and then persist indefinitely. This would lead to hard-to-predict misbehavior. Fix by rechecking the tuple's visibility after detoasting.
Fix edge-case integer overflow detection bug on some platforms (Dean Rasheed) §
Computing
0 - INT64_MINshould result in an overflow error, and did on most platforms. However, platforms with neither integer overflow builtins nor 128-bit integers would fail to spot the overflow, instead returningINT64_MIN.Detect Julian-date overflow when adding or subtracting an
intervalto/from atimestamp(Tom Lane) §Some cases that should cause an out-of-range error produced an incorrect result instead.
Add more checks for overflow in
interval_mul()andinterval_div()(Dean Rasheed) §Some cases that should cause an out-of-range error produced an incorrect result instead.
Ensure cached statistics are discarded after a change to
stats_fetch_consistency(Shinya Kato) §In some code paths, it was possible for stale statistics to be returned.
Make the
pg_file_settingsview check validity of unapplied values for settings withbackendorsuperuser-backendcontext (Tom Lane) §Invalid values were not noted in the view as intended. This escaped detection because there are very few settings in these groups.
Match collation too when matching an existing index to a new partitioned index (Peter Eisentraut) §
Previously we could accept an index that has a different collation from the corresponding element of the partition key, possibly leading to misbehavior.
Avoid failure if a child index is dropped concurrently with
REINDEX INDEXon a partitioned index (Fei Changhong) § §Fix insufficient locking when cleaning up an incomplete split of a GIN index's internal page (Fei Changhong, Heikki Linnakangas) §
The code tried to do this with shared rather than exclusive lock on the buffer. This could lead to index corruption if two processes attempted the cleanup concurrently.
Avoid premature release of buffer pin in GIN index insertion (Tom Lane) §
If an index root page split occurs concurrently with our own insertion, the code could fail with “buffer NNNN is not owned by resource owner”.
Avoid failure with partitioned SP-GiST indexes (Tom Lane) §
Trying to use an index of this kind could lead to “No such file or directory” errors.
Fix ownership change reporting for large objects (Tom Lane) §
A no-op
ALTER LARGE OBJECT OWNERcommand (that is, one selecting the existing owner) passed the wrong class ID to thePostAlterHook, probably confusing any extension using that hook.Fix reporting of I/O timing data in
EXPLAIN (BUFFERS)(Michael Paquier) §The numbers labeled as “shared/local” actually refer only to shared buffers, so change that label to “shared”.
Ensure durability of
CREATE DATABASE(Noah Misch) § §If an operating system crash occurred during or shortly after
CREATE DATABASE, recovery could fail, or subsequent connections to the new database could fail. If a base backup was taken in that window, similar problems could be observed when trying to use the backup. The symptom would be that the database directory,PG_VERSIONfile, orpg_filenode.mapfile was missing or empty.Add more
LOGmessages when starting and ending recovery from a backup (Andres Freund) §This change provides additional information in the postmaster log that may be useful for diagnosing recovery problems.
Prevent standby servers from incorrectly processing dead index tuples during subtransactions (Fei Changhong) §
The
startedInRecoveryflag was not correctly set for a subtransaction. This affects only processing of dead index tuples. It could allow a query in a subtransaction to ignore index entries that it should return (if they are already dead on the primary server, but not dead to the standby transaction), or to prematurely mark index entries as dead that are not yet dead on the primary. It is not clear that the latter case has any serious consequences, but it's not the intended behavior.Fix integer overflow hazard in checking whether a record will fit into the WAL decoding buffer (Thomas Munro) §
This bug appears to be only latent except when running a 32-bit PostgreSQL build on a 64-bit platform.
Fix deadlock between a logical replication apply worker, its tablesync worker, and a session process trying to alter the subscription (Shlok Kyal) §
One edge of the deadlock loop did not involve a lock wait, so the deadlock went undetected and would persist until manual intervention.
Ensure that column default values are correctly transmitted by the pgoutput logical replication plugin (Nikhil Benesch) §
ALTER TABLE ADD COLUMNwith a constant default value for the new column avoids rewriting existing tuples, instead expecting that reading code will insert the correct default into a tuple that lacks that column. If replication was subsequently initiated on the table, pgoutput would transmit NULL instead of the correct default for such a column, causing incorrect replication on the subscriber.Fix failure of logical replication's initial sync for a table with no columns (Vignesh C) §
This case generated an improperly-formatted
COPYcommand.Prevent examining system catalogs with the wrong snapshot during logical decoding (Fei Changhong) §
If decoding begins partway through a transaction that modifies system catalogs, the decoder may not recognize that, causing it to fail to treat that transaction as in-progress for catalog lookups. This fix deals with the case that a top-level transaction is already marked as containing catalog changes, but its subtransaction(s) are not.
Return the correct status code when a new client disconnects without responding to the server's password challenge (Liu Lang, Tom Lane) §
In some cases we'd treat this as a loggable error, which was not the intention and tends to create log spam, since common clients like psql frequently do this. It may also confuse extensions that use
ClientAuthentication_hook.Fix incompatibility with OpenSSL 3.2 (Tristan Partin, Bo Andreson) §
Use the BIO “app_data” field for our private storage, instead of assuming it's okay to use the “data” field. This mistake didn't cause problems before, but with 3.2 it leads to crashes and complaints about double frees.
Be more wary about OpenSSL not setting
errnoon error (Tom Lane) §If
errnoisn't set, assume the cause of the reported failure is read EOF. This fixes rare cases of strange error reports like “could not accept SSL connection: Success”.Fix file descriptor leakage when a foreign data wrapper's
ForeignAsyncRequestfunction fails (Heikki Linnakangas) §Report ENOMEM errors from file-related system calls as
ERRCODE_OUT_OF_MEMORY, notERRCODE_INTERNAL_ERROR(Alexander Kuzmenkov) §In PL/pgSQL, support SQL commands that are
CREATE FUNCTION/CREATE PROCEDUREwith SQL-standard bodies (Tom Lane) §Previously, such cases failed with parsing errors due to the semicolon(s) appearing in the function body.
Fix libpq's handling of errors in pipelines (Álvaro Herrera) § §
The pipeline state could get out of sync if an error is returned for reasons other than a query problem (for example, if the connection is lost). Potentially this would lead to a busy-loop in the calling application.
Make libpq's
PQsendFlushRequest()function flush the client output buffer under the same rules as otherPQsendfunctions (Jelte Fennema-Nio) §In pipeline mode, it may still be necessary to call
PQflush()as well; but this change removes some inconsistency.Avoid race condition when libpq initializes OpenSSL support concurrently in two different threads (Willi Mann, Michael Paquier) §
Fix timing-dependent failure in GSSAPI data transmission (Tom Lane) §
When using GSSAPI encryption in non-blocking mode, libpq sometimes failed with “GSSAPI caller failed to retransmit all data needing to be retried”.
In pg_dump, don't dump RLS policies or security labels for extension member objects (Tom Lane, Jacob Champion) § §
Previously, commands would be included in the dump to set these properties, which is really incorrect since they should be considered as internal affairs of the extension. Moreover, the restoring user might not have adequate privilege to set them, and indeed the dumping user might not have enough privilege to dump them (since dumping RLS policies requires acquiring lock on their table).
In pg_dump, don't dump an extended statistics object if its underlying table isn't being dumped (Rian McGuire, Tom Lane) §
This conforms to the behavior for other dependent objects such as indexes.
Make it an error for a pgbench script to end with an open pipeline (Anthonin Bonnefoy) §
Previously, pgbench would behave oddly if a
\startpipelinecommand lacked a matching\endpipeline. This seems like a scripting mistake rather than a case that pgbench needs to handle nicely, so throw an error.Fix crash in
contrib/intarrayif an array with an element equal toINT_MAXis inserted into agist__int_opsindex (Alexander Lakhin, Tom Lane) §Report a better error when
contrib/pageinspect'shash_bitmap_info()function is applied to a partitioned hash index (Alexander Lakhin, Michael Paquier) §Report a better error when
contrib/pgstattuple'spgstathashindex()function is applied to a partitioned hash index (Alexander Lakhin) §On Windows, suppress autorun options when launching subprocesses in pg_ctl and pg_regress (Kyotaro Horiguchi) § §
When launching a child process via
cmd.exe, pass the/Dflag to prevent executing any autorun commands specified in the registry. This avoids possibly-surprising side effects.Move
is_valid_ascii()frommb/pg_wchar.htoutils/ascii.h(Jubilee Young) §This change avoids the need to include
<simd.h>inpg_wchar.h, which was causing problems for some third-party code.Fix compilation failures with libxml2 version 2.12.0 and later (Tom Lane) §
Fix compilation failure of
WAL_DEBUGcode on Windows (Bharath Rupireddy) §Suppress compiler warnings from Python's header files (Peter Eisentraut, Tom Lane) §
Our preferred compiler options provoke warnings about constructs appearing in recent versions of Python's header files. When using gcc, we can suppress these warnings with a pragma.
Avoid deprecation warning when compiling with LLVM 18 (Thomas Munro) §
Update time zone data files to tzdata release 2024a for DST law changes in Greenland, Kazakhstan, and Palestine, plus corrections for the Antarctic stations Casey and Vostok. Also historical corrections for Vietnam, Toronto, and Miquelon. (Tom Lane) §