E.29. Выпуск 14.20

Дата выпуска: 2025-11-13

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

E.29.1. Миграция на версию 14.20

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

Если вы обновляете сервер с более ранней версии, чем 14.19, см. также Раздел E.30.

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

  • Проверка прав CREATE для схемы при выполнении команды CREATE STATISTICS (Йелте Феннема-Нио) §

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

    Проект PostgreSQL благодарит Йелта Феннема-Нио за сообщение об этой проблеме. (CVE-2025-12817)

  • Предотвращение целочисленного переполнения в libpq при вычислении требуемого объёма памяти (Джейкоб Чемпион) §

    При вычислении объёма памяти, который необходимо выделить, некоторые функции libpq не учитывали все тонкости. Если на вход передавался значительный объём данных, могло возникнуть целочисленное переполнение. В результате выделялся недостаточный объём, и запись выполнялась за пределами буфера.

    Проект PostgreSQL благодарит Алексея Соловьёва из Positive Technologies за сообщение об этой проблеме. (CVE-2025-12818)

  • Доработка исправления обработки классов символов в регулярных выражениях SIMILAR TO (Лауренц Альбе) §

    Из-за предыдущего исправления, внесённого в процесс преобразования выражений SIMILAR TO в регулярные выражения в стиле POSIX, перестал работать особый случай, который раньше поддерживался: если сразу после открывающейся скобки стоит экранирующий символ, а после последовательности экранирующих символов — закрывающая скобка (например, [\w]), закрывающая скобка не рассматривается как завершение класса символов.

  • Исправление разбора агрегатных функций, в аргументах которых содержится вложенный запрос SELECT со ссылкой FROM на внешнее CTE (Том Лейн) §

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

  • Исправление ошибок «no relation entry for relid» (не найден элемент отношения с номером) в особых случаях оценки стоимости выполнения SubPlan (Ричард Гуо) §

  • Удаление ошибочного проверочного утверждения при очистке индексов btree (Питер Гейган) §

  • Устранение риска зацикливания при сканировании индексов GIN с несколькими условиями сканирования (Том Лейн) §

    При сканировании индексов GIN можно использовать условия, с помощью которых нельзя найти конкретную запись, но можно исключить из выборки неподходящие записи. К таким условиям относится, например, !term в tsquery. Однако в массиве условий сканирования такое условие не должно стоять на первом месте. Это требование соблюдалось не во всех случаях, в результате чего нельзя было гарантировать, что запрос, содержащий такие условия и обычные условия сканирования, будет работать. Всё зависело от порядка определения условий в запросе.

  • Обеспечение возможности отменять сканирования индексов GIN (Том Лейн) §

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

  • Предоставление снимка для выражений индексов в ходе автоматического расчёта сводки для индексов BRIN, если это необходимо (Альваро Эррера) § §

    Раньше автоматический расчёт сводки для таких индексов завершался ошибкой и оставлял после себя кортежи-местозаполнители, что со временем приводило к раздуванию индекса.

  • Устранение угрозы целочисленного переполнения при сканировании индексов BRIN, если количество страниц в таблице приближается к 232 (Сунил С) §

    Эта ошибка могла привести к бесконечному циклу сканирования или сканированию ненужных страниц таблицы.

  • Исправление некорректного дополнения нулями хранимых значений в коде кортежей, обработанных JIT (Дэвид Роули) §

    Когда JIT-обработка не использовалась, корректно применялось расширение знака, что приводило к разному представлению небольших целочисленных типов данных. В большинстве случаев это несоответствие не проявлялось, но при использовании узлов плана Memoize фиксировались ошибки «could not find memoization table entry» (не удалось найти записи в таблице с мемоизацией). Были возможны и другие проявления.

  • Добавление недостающих перепроверок EvalPlanQual для узлов планов TID Scan и TID Range Scan (Софи Алперт, Дэвид Роули) § §

    Раньше при параллельных изменениях могло не перепроверяться условие для ctid. Из-за этого поведение запроса могло меняться в зависимости от выбранного типа плана.

  • Исправление обработки EvalPlanQual сторонних или нестандартных соединений, у которых нет альтернативного плана локального соединения, подготовленного для перепроверки EPQ (Масахико Савада, Эцуро Фудзита) §

    В этих случаях должны использоваться сторонние или нестандартные методы доступа. Этого не происходило, что, как правило, приводило к сбоям.

  • Пропуск копирования ограничений при выполнении DETACH CONCURRENTLY для секционирования по хешу (Хайян Ли) §

    Раньше в рамках ALTER TABLE DETACH PARTITION CONCURRENTLY ограничения секционирования копировались в отсоединённую секцию. Это было необязательно отчасти из-за того, что копирование не выполнялось при DETACH в неблокирующем режиме. Однако основная причина в том, что в случае секционирования по хешу выражение ограничения содержит ссылки на OID родительской таблицы. Это мешает при выгрузке/восстановлении, а также в случаях, когда после выполнения DETACH родительская таблица удаляется. Начиная с версии 19, ограничения больше не будут копироваться. Чтобы минимизировать риски непредвиденных последствий, в выпущенных версиях копирование ограничения пропускается только для секционирования по хешу.

  • Запрет на добавление генерируемых столбцов в ключи секционирования (Цзянь Хи, Ашутош Бапат) §

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

  • Запрет на использование генерируемых столбцов в предложениях COPY ... FROM ... WHERE (Питер Эйзентраут, Цзянь Хи) §

    Раньше попытки сослаться на такой столбец приводили к некорректному поведению или странному сообщению об ошибке, поскольку на момент фильтрации WHERE такие генерируемые столбцы ещё не были вычислены.

  • Исправление проверки видимости для объектов статистики в pg_temp (Ной Миш) §

    В имени объекта статистики, расположенного во временной схеме, должно быть указание схемы, однако функция pg_statistics_obj_is_visible() игнорировала это правило и могла вернуть «true» для объекта, для которого схема не указана. В свою очередь такие функции, как pg_describe_object(), могли указать схему в имени объекта некорректно.

  • Устранение утечки памяти в подпланах с хешированием (Хайян Ли) §

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

  • Добавление недостающих проверок идентификации реплики в командах MERGE и INSERT ... ON CONFLICT DO UPDATE (Чжицзе Хоу) § §

    Теперь если MERGE потребует изменения или удаления строк таблицы и эти изменения или удаления будут опубликованы целевой таблицей, она должна иметь REPLICA IDENTITY. Если это условие не выполняется, репликация может прерваться без уведомления. Аналогично, если целевая таблица будет публиковать добавления или изменения строк, команда INSERT с предложением UPDATE будет требовать наличия REPLICA IDENTITY.

  • Предотвращение взаимоблокировок при выполнении команды DROP SUBSCRIPTION, когда один и тот же сервер является и публикующим сервером, и подписчиком (Дилип Кумар) §

  • Исправление вывода информации о задержке репликации в представлении pg_stat_replication (Фудзии Масао) §

    Если при воспроизведении WAL на любом резервном сервере LSN переставал увеличиваться, обновление столбцов write_lag и flush_lag прекращалось.

  • Устранение дублирования сообщений о некорректных значениях параметра primary_slot_name в журнале (Фудзии Масао) §

  • Удаление незаконченного файла состояния слота после сбоя записи состояния слота репликации на диск (Микаэль Пакье) §

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

  • Предотвращение нежелательного выключения приёмника WAL при переключении с потоковой передачи на архивацию источника WAL (Сюнэн Чжоу) §

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

  • Исправление ошибок логической репликации, вызванных возможным совпадением идентификаторов файлов обычных и временных таблиц (Вигнеш Си) §

    В результате этой нечастой проблемы выводились ошибки типа «unexpected duplicate for tablespace X, relfilenode Y» (неожиданный повтор табличного пространства X, номер файлового узла Y). Проблема также влияла на contrib/autoprewarm. Побочным эффектом исправления стало то, что теперь функция pg_filenode_relation() игнорирует временные таблицы.

  • Предотвращение сбоя проверочного утверждения при попытке освободить слот репликации в однопользовательском режиме (Хайато Курода) §

  • Исправление ошибочного вывода сообщений об ошибках при проверке наличия у пользователя прав администратора Windows (Брайан Грин) §

    Сообщение об ошибке или не выводилось совсем, или содержало мусор. Жалоб на эту проблему не поступало, что указывает на то, что ошибка этих системных вызовов происходила крайне редко.

  • Устранение сбоя при запуске на платформах macOS и BSD, вызванного коллизией с существующим набором семафоров (Том Лейн) §

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

  • Устранение ложных предупреждений при проверке контекстов памяти в отладочных сборках 64-битной Windows (Дэвид Роули) §

  • Корректная обработка GROUP BY DISTINCT в операторах присваивания PL/pgSQL (Том Лейн) §

    Анализатор не распознавал параметр DISTINCT, поэтому команда выполнялась как будто с GROUP BY.

  • Устранение утечки памяти при обработке ошибки SQL в PL/Python (Том Лейн) §

    Устранена утечка памяти в течение всего сеанса, появившаяся в предыдущих корректирующих выпусках.

  • Исправление вывода символов с установленным старшим битом для трассировки в libpq (Ран Бенита) §

    На платформах, где тип char считается знаковым, вывод оформлялся с \xffffff.

  • Исправление поведения libpq в отношении обработки ошибок в Windows, связанных с сокетами, в логике GSSAPI (Нин У, Том Лейн) §

    Код для шифрования/дешифрования передаваемых данных при использовании GSSAPI не распознавал условия ошибок в сокете соединения, поскольку Windows сообщает о таких ошибках не так, как другие ОС. Это приводило к невозможности установить такие соединения в Windows.

  • Реализация выгрузки меток безопасности для подписок и триггеров событий в pg_dump (Цзянь Хи, Фудзии Масао) §

    Раньше метки для этих типов объектов пропускались.

  • Исправление сортировки списков прав по умолчанию и ограничений внешних ключей утилитой pg_dump (Кирилл Решке, Альваро Эррера) § § §

    Исправление обеспечивает определённый порядок для этих типов объектов баз данных, что уже было сделано для других типов объектов.

  • Корректное проставление зависимостей комментариев от отдельно выгружаемых ограничений для доменов в pg_dump (Ной Миш) §

    Раньше отсутствие такой зависимости могло приводить к тому, что утилита pg_restore пыталась параллельно добавить комментарий до того, как ограничение было восстановлено.

  • Пропуск создания комментариев и меток безопасности для публикаций и подписок, которые не восстанавливаются в данный момент, в pg_restore (Цзянь Хи, Фудзии Масао) § §

    Теперь, если используются флаги --no-publications или --no-subscriptions, команды COMMENT и SECURITY LABEL для публикаций и подписок выполняться не будут.

  • Исправление различных ошибок в логике сжатия данных pg_dump и pg_restore (Даниэль Густафссон, Том Лейн) §

    В некоторых местах проверка пропускалась или выполнялась неправильно. На компьютерах с порядком байт от старшего возникали вопросы переносимости. Сообщений об этих проблемах не поступало, так как код используется только для чтения сжатых файлов с перечнем больших объектов в рамках выгрузок каталогов. pg_dump не создаёт таких выгрузок; проблемы бы возникли в случае сжатия файла с перечнем больших объектов вручную, что возможно, но используется редко.

  • Исправление поведения pgbench, чтобы программа завершалась штатно при запуске операции COPY (Антонин Боннефой) §

    Изначально не планировалось, что pgbench будет поддерживать такое поведение, но без него происходило зацикливание.

  • Исправление вывода сообщений программой pgbench в случае нескольких ошибок (Юго Нагата) §

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

  • Обеспечение возможности отменить функции contrib/pg_buffercache (Сатьянараяна Нарлапурам, Юйхан Цю) §

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

  • Исправление проверки прав contrib/pg_prewarm для индексов (Аюш Ватса, Натан Боссарт) §

    pg_prewarm() проверяет наличие права SELECT для отношений, которые необходимо разогреть. Однако, поскольку для индексов нет отдельных прав SQL, разогреть их могли только суперпользователи. Теперь будет проверяться право SELECT для таблицы индекса.

  • Повышение устойчивости contrib/pgstattuple при обработке пустых или нерабочих страниц индекса (Нитин Мотиани) §

    Теперь все полностью нулевые страницы рассматриваются как свободное пространство, а страницы, помеченные как нерабочие в результате проверки размера особого пространства страницы, пропускаются. Для индексов btree полностью нулевые страницы уже рассматривались как свободное пространство, но для хеш-индексов и индексов GIST выводилась ошибка, что было сильно неудобно для пользователей. Также для всех трёх типов индексов повреждённые страницы не вызывают ошибку, а пропускаются.

  • Усиление барьеров для чтения и записи компилятором Clang (Томас Манро) §

    Предполагалось, что __atomic_thread_fence() создаёт достаточный барьер, чтобы компилятор C не менял порядок доступа к памяти, однако оказалось, что это ограничение не работало для компилятора Clang, позволяя ему генерировать неправильный код, как минимум, для процессоров RISC-V, MIPS и LoongArch. Чтобы это исправить, были добавлены явные барьеры для компилятора.

  • Исправление сборки с LLVM версии 21 и новее (Холгер Хофштеттер) §

  • Исправлена инфраструктура сборки PGXS, чтобы поддержать сборку файлов po для расширений с помощью NLS (Рё Мацумура) §

E.29. Release 14.20

Release date: 2025-11-13

This release contains a variety of fixes from 14.19. For information about new features in major release 14, see Section E.49.

E.29.1. Migration to Version 14.20

A dump/restore is not required for those running 14.X.

However, if you are upgrading from a version earlier than 14.19, see Section E.30.

E.29.2. Changes

  • Check for CREATE privileges on the schema in CREATE STATISTICS (Jelte Fennema-Nio) §

    This omission allowed table owners to create statistics in any schema, potentially leading to unexpected naming conflicts.

    The PostgreSQL Project thanks Jelte Fennema-Nio for reporting this problem. (CVE-2025-12817)

  • Avoid integer overflow in allocation-size calculations within libpq (Jacob Champion) §

    Several places in libpq were not sufficiently careful about computing the required size of a memory allocation. Sufficiently large inputs could cause integer overflow, resulting in an undersized buffer, which would then lead to writing past the end of the buffer.

    The PostgreSQL Project thanks Aleksey Solovev of Positive Technologies for reporting this problem. (CVE-2025-12818)

  • Further fix processing of character classes within SIMILAR TO regular expressions (Laurenz Albe) §

    The previous fix for translating SIMILAR TO pattern matching expressions to POSIX-style regular expressions broke a corner case that formerly worked: if there is an escape character right after the opening bracket and then a closing bracket right after the escape sequence (for example [\w]), the closing bracket was no longer seen as terminating the character class.

  • Fix parsing of aggregate functions whose arguments contain a sub-select with a FROM reference to a CTE outside the aggregate function (Tom Lane) §

    Such a CTE reference must act like a outer-level column reference when determining the aggregate's semantic level; but it was not being accounted for, leading to obscure planner or executor errors.

  • Fix no relation entry for relid errors in corner cases while estimating SubPlan costs (Richard Guo) §

  • Remove faulty assertion in btree index cleanup (Peter Geoghegan) §

  • Fix possible infinite loop in GIN index scans with multiple scan conditions (Tom Lane) §

    GIN can handle scan conditions that can reject non-matching entries but are not useful for searching for relevant entries, for example a tsquery clause like !term. But such a condition must not be first in the array of scan conditions. The code failed to ensure that in all cases, with the result that a query having a mix of such conditions with normal conditions might work or not depending on the order in which the conditions were given in the query.

  • Ensure that GIN index scans can be canceled (Tom Lane) §

    Some code paths were capable of running for a long time without checking for interrupts.

  • Ensure that BRIN autosummarization provides a snapshot for index expressions that need one (Álvaro Herrera) § §

    Previously, autosummarization would fail for such indexes, and then leave placeholder index tuples behind, causing the index to bloat over time.

  • Fix integer-overflow hazard in BRIN index scans when the table contains close to 232 pages (Sunil S) §

    This oversight could result in an infinite loop or scanning of unneeded table pages.

  • Fix incorrect zero-extension of stored values in JIT-generated tuple deforming code (David Rowley) §

    When not using JIT, the equivalent code does sign-extension not zero-extension, leading to a different Datum representation of small integer data types. This inconsistency was masked in most cases, but it is known to lead to could not find memoization table entry errors when using Memoize plan nodes, and there might be other symptoms.

  • Add missing EvalPlanQual rechecks for TID Scan and TID Range Scan plan nodes (Sophie Alpert, David Rowley) § §

    This omission led to possibly not rechecking a condition on ctid during concurrent-update situations, causing the update's behavior to vary depending on which plan type had been selected.

  • Fix EvalPlanQual handling of foreign or custom joins that do not have an alternative local-join plan prepared for EPQ (Masahiko Sawada, Etsuro Fujita) §

    In such cases the foreign or custom access method should be invoked normally, but that did not happen, typically leading to a crash.

  • Avoid duplicating hash partition constraints during DETACH CONCURRENTLY (Haiyang Li) §

    ALTER TABLE DETACH PARTITION CONCURRENTLY was written to add a copy of the partitioning constraint to the now-detached partition. This was misguided, partially because non-concurrent DETACH doesn't do that, but mostly because in the case of hash partitioning the constraint expression contains references to the parent table's OID. That causes problems during dump/restore, or if the parent table is dropped after DETACH. In v19 and later, we'll no longer create any such copied constraints at all. In released branches, to minimize the risk of unforeseen consequences, only skip adding a copied constraint if it is for hash partitioning.

  • Disallow generated columns in partition keys (Jian He, Ashutosh Bapat) §

    This was already not allowed, but the check missed some cases, such as where the column reference is implicit in a whole-row reference.

  • Disallow generated columns in COPY ... FROM ... WHERE clauses (Peter Eisentraut, Jian He) §

    Previously, incorrect behavior or an obscure error message resulted from attempting to reference such a column, since generated columns have not yet been computed at the point where WHERE filtering is done.

  • Fix visibility checking for statistics objects in pg_temp (Noah Misch) §

    A statistics object located in a temporary schema cannot be named without schema qualification, but pg_statistics_obj_is_visible() missed that memo and could return true regardless. In turn, functions such as pg_describe_object() could fail to schema-qualify the object's name as expected.

  • Fix memory leakage in hashed subplans (Haiyang Li) §

    Any memory consumed by the hash functions used for hashing tuples constituted a query-lifespan memory leak. One way that could happen is if the values being hashed require de-toasting.

  • Add missing replica identity checks in MERGE and INSERT ... ON CONFLICT DO UPDATE (Zhijie Hou) § §

    If MERGE may require update or delete actions, and the target table publishes updates or deletes, insist that it have a REPLICA IDENTITY defined. Failing to require this can silently break replication. Likewise, INSERT with an UPDATE option must require REPLICA IDENTITY if the target table publishes either inserts or updates.

  • Avoid deadlock during DROP SUBSCRIPTION when publisher is on the same server as subscriber (Dilip Kumar) §

  • Fix incorrect reporting of replication lag in pg_stat_replication view (Fujii Masao) §

    If any standby server's replay LSN stopped advancing, the write_lag and flush_lag columns would eventually stop updating.

  • Avoid duplicative log messages about invalid primary_slot_name settings (Fujii Masao) §

  • Remove the unfinished slot state file after failing to write a replication slot's state to disk (Michael Paquier) §

    Previously, a failure such as out-of-disk-space resulted in leaving a temporary state.tmp file behind. That's problematic because it would block all subsequent attempts to write the state, requiring manual intervention to clean up.

  • Avoid unwanted WAL receiver shutdown when switching from streaming to archive WAL source (Xuneng Zhou) §

    During a timeline change, a standby server's WAL receiver should remain alive, waiting for a new WAL streaming start point. Instead it was repeatedly shutting down and immediately getting restarted, which could confuse status monitoring code.

  • Avoid failures in logical replication due to chance collisions of file numbers between regular and temporary tables (Vignesh C) §

    This low-probability problem manifested as transient errors like unexpected duplicate for tablespace X, relfilenode Y. contrib/autoprewarm was also affected. A side-effect of the fix is that the SQL function pg_filenode_relation() will now ignore temporary tables.

  • Avoid assertion failure when trying to release a replication slot in single-user mode (Hayato Kuroda) §

  • Fix incorrect printing of messages about failures in checking whether the user has Windows administrator privilege (Bryan Green) §

    This code would have crashed or at least printed garbage. No such cases have been reported though, indicating that failure of these system calls is extremely rare.

  • Avoid startup failure on macOS and BSD platforms when there is a collision with a pre-existing semaphore set (Tom Lane) §

    If the pre-existing set has fewer semaphores than we asked for, these platforms return EINVAL not EEXIST as our code expected, resulting in failure to start the database.

  • Fix false memory-context-checking warnings in debug builds on 64-bit Windows (David Rowley) §

  • Correctly handle GROUP BY DISTINCT in PL/pgSQL assignment statements (Tom Lane) §

    The parser failed to record the DISTINCT option in this context, so that the command would act as if it were plain GROUP BY.

  • Avoid leaking memory when handling a SQL error within PL/Python (Tom Lane) §

    This fixes a session-lifespan memory leak introduced in our previous minor releases.

  • Fix libpq's trace output of characters with the high bit set (Ran Benita) §

    On platforms where char is considered signed, the output included unsightly \xffffff decoration.

  • Fix libpq's handling of socket-related errors on Windows within its GSSAPI logic (Ning Wu, Tom Lane) §

    The code for encrypting/decrypting transmitted data using GSSAPI did not correctly recognize error conditions on the connection socket, since Windows reports those differently than other platforms. This led to failure to make such connections on Windows.

  • In pg_dump, dump security labels on subscriptions and event triggers (Jian He, Fujii Masao) §

    Labels on these types of objects were previously missed.

  • Fix pg_dump's sorting of default ACLs and foreign key constraints (Kirill Reshke, Álvaro Herrera) § § §

    Ensure consistent ordering of these database object types, as was already done for other object types.

  • In pg_dump, label comments for separately-dumped domain constraints with the proper dependency (Noah Misch) §

    This error could lead to parallel pg_restore attempting to create the comment before the constraint itself has been restored.

  • In pg_restore, skip comments and security labels for publications and subscriptions that are not being restored (Jian He, Fujii Masao) § §

    Do not emit COMMENT or SECURITY LABEL commands for these objects when --no-publications or --no-subscriptions is specified.

  • Fix assorted errors in the data compression logic in pg_dump and pg_restore (Daniel Gustafsson, Tom Lane) §

    Error checking was missing or incorrect in several places, and there were also portability issues that would manifest on big-endian hardware. These problems had been missed because this code is only used to read compressed TOC files within directory-format dumps. pg_dump never produces such a dump; the case can be reached only by manually compressing the TOC file after the fact, which is a supported thing to do but very uncommon.

  • Fix pgbench to error out cleanly if a COPY operation is started (Anthonin Bonnefoy) §

    pgbench doesn't intend to support this case, but previously it went into an infinite loop.

  • Fix pgbench's reporting of multiple errors (Yugo Nagata) §

    In cases where two successive PQgetResult calls both fail, pgbench might report the wrong error message.

  • Ensure that contrib/pg_buffercache functions can be canceled (Satyanarayana Narlapuram, Yuhang Qiu) §

    Some code paths were capable of running for a long time without checking for interrupts.

  • Fix contrib/pg_prewarm's privilege checks for indexes (Ayush Vatsa, Nathan Bossart) §

    pg_prewarm() requires SELECT privilege on relations to be prewarmed. However, since indexes have no SQL privileges of their own, this resulted in non-superusers being unable to prewarm indexes. Instead, check for SELECT privilege on the index's table.

  • Make contrib/pgstattuple more robust about empty or invalid index pages (Nitin Motiani) §

    Count all-zero pages as free space, and ignore pages that are invalid according to a check of the page's special-space size. The code for btree indexes already counted all-zero pages as free, but the hash and gist code would error out, which has been found to be much less user-friendly. Similarly, make all three cases agree on ignoring corrupted pages rather than throwing errors.

  • Harden our read and write barrier macros to satisfy Clang (Thomas Munro) §

    We supposed that __atomic_thread_fence() is a sufficient barrier to prevent the C compiler from re-ordering memory accesses around it, but it appears that that's not true for Clang, allowing it to generate incorrect code for at least RISC-V, MIPS, and LoongArch machines. Add explicit compiler barriers to fix that.

  • Fix building with LLVM version 21 and later (Holger Hoffstätte) §

  • Fix PGXS build infrastructure to support building NLS po files for extensions (Ryo Matsumura) §

FAQ