E.33. Выпуск 15.7
Дата выпуска: 2024-05-09
В этот выпуск вошли различные исправления, внесённые после версии 15.6. За информацией о нововведениях версии 15 обратитесь к Разделу E.40.
E.33.1. Миграция на версию 15.7
Если используется версия 15.X, выгрузка/восстановление базы не требуется.
Однако в системных представлениях pg_stats_ext и pg_stats_ext_exprs была обнаружена уязвимость безопасности, которая потенциально позволяла аутентифицированным пользователям базы данных видеть данные, к которым они не должны были иметь доступа. Если такая угроза безопасности вызывает опасения, выполните действия, указанные в первом пункте списка изменений ниже.
Однако если вы обновляете сервер с более ранней версии, чем 15.6, см. Раздел E.34.
E.33.2. Изменения
Видимость записей
pg_stats_extиpg_stats_ext_exprsограничена владельцем таблицы (Натан Боссарт) §В этих представлениях не скрывалась статистика для выражений со столбцами, на чтение которых у текущего пользователя не было разрешения. Столбцы представления, такие как
most_common_vals, могли содержать данные, важные для безопасности. Потенциальные взаимодействия не до конца понятны, поэтому в целях безопасности строки в этих представлениях теперь видимы только владельцу связанной таблицы.Проект PostgreSQL благодарит Лукаса Фиттла за сообщение об этой проблеме. (CVE-2024-4317)
Это исправление корректирует поведение только в новых кластерах баз данных, созданных с помощью initdb. Чтобы применить это изменение в существующем кластере, необходимо сделать следующее:
Найдите скрипт SQL
fix-CVE-2024-4317.sqlв каталогеshareинсталляции PostgreSQL (обычно он находится в/usr/share/postgresql/). Обязательно используйте скрипт, соответствующий вашей основной версии PostgreSQL. Отсутствие данного файла означает, что либо основная версия не подвержена уязвимости (она есть только в версиях 14–16), либо корректирующая версия слишком устарела для исправления.В каждой базе данных кластера запустите скрипт
fix-CVE-2024-4317.sqlот имени суперпользователя. В psql это будет выглядеть так:\i /usr/share/postgresql/fix-CVE-2024-4317.sql
(путь к файлу должен быть изменён соответствующим образом). Любая ошибка потенциально указывает на то, что используется неправильная версия скрипта. Рекомендуется выполнить скрипт несколько раз.
Не забудьте применить скрипт к шаблонам баз данных
template0иtemplate1, иначе уязвимости будут подвержены базы данных, созданные позднее. Чтобы исправитьtemplate0, необходимо временно разрешить ему принимать соединения. Для этого используйтеALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;
, а после исправления
template0отмените разрешение с помощьюALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;
Исправление поведения команды
INSERTпри вставке из нескольких строкVALUESв целевой столбец, который является доменом, определённым поверх массива или составного типа (Том Лейн) §В таких случаях команда либо завершалась ошибкой с сообщением о несовпадающих типах данных, либо вставлялись непредсказуемые приведённые значения, в результате чего могли выдаваться странные результаты.
Требование права
SELECTдля целевой таблицы при выполнении командыMERGEс предложениемDO NOTHING(Альваро Эррера) §Право
SELECTвсегда требовалось во всех практических случаях, но теперь оно требуется, даже если запрос не считывает столбцы целевой таблицы. Это позволяет избежать особого случая, когда для командыMERGEне требуются никакие права, что кажется нежелательным, даже если команда ничего не делает.Исправление обработки самоизменяемых кортежей при выполнении команды
MERGE(Дин Рашид) §Теперь, если целевая строка соединяется с более чем одной исходной строкой, выдаётся ошибка согласно требованиям стандарта SQL. (Ранее код мог игнорировать это условие при выполнении параллельного изменения.) Кроме того, теперь выдаётся корректное сообщение об ошибке, если целевая строка уже обновлена более поздней командой в текущей транзакции, когда в запросе используется триггер
BEFOREили изменчивая функция.Исправление некорректного отсечения секции NULL в случаях, когда таблица секционирована по логическому столбцу и запрос содержит логическое предложение
IS NOT(Дэвид Роули) §Значение NULL удовлетворяло предложению вида
, поэтому отсечение секции, содержащей значения NULL, приводило к некорректным результатам.boolcolIS NOT FALSEОбеспечение перемещения всех последовательностей, принадлежащих таблице, в новую схему при использовании команды
ALTER FOREIGN TABLE SET SCHEMA(Том Лейн) §Перемещение обычной таблицы в новую схему приводит к тому, что все последовательности, принадлежащие таблице, также перемещаются в эту схему (вместе с индексами и ограничениями). Раньше последовательности сторонних таблиц не перемещались.
Обеспечение того же режима журналирования последовательностей со столбцами идентификаторов или столбцами serial, создаваемых командой
ALTER TABLE ... ADD COLUMN, что и у таблицы-владельца (Питер Эйзентраут) §Если таблица создаётся как нежурналируемая командой
CREATE UNLOGGED TABLE, журналирование любых принадлежащих таблице последовательностей также не выполняется. Но для командыALTER TABLEтакое поведение не обеспечивалось, так что выполнялось ненужное журналирование последовательности с добавленными столбцами идентификаторов.Улучшение информативности сообщения об ошибке
ALTER TABLE ... ALTER COLUMN TYPEпри наличии зависимой функции или публикации (Том Лейн) §Распознавание ключевых слов стратегии создания базы данных в команде
CREATE DATABASEбез учёта регистра для обеспечения согласованности с другими параметрами (Томаш Вондра) §Исправление подсчёта страниц в куче командой
EXPLAINпри сканировании кучи по битовой карте (Мелани Плейгман) §Ранее не учитывались страницы кучи, не содержащие видимых кортежей, но более логично подсчитывать все страницы, возвращаемые при сканировании индекса по битовой карте.
Исправление вывода команды
EXPLAINдля подпланов вMERGE(Дин Рашид) §При выполнении команды
EXPLAINпараметры подплана, ссылающиеся на переменные в других частях дерева плана, иногда не отображались должным образом.Предотвращение взаимоблокировок при удалении потерянных временных таблиц (Михаил Жилин) §
Если сеанс, создающий временную таблицу, завершается сбоем без удаления таблицы, процесс автоочистки рано или поздно попытается удалить потерянную таблицу. Однако входящий сеанс, которому назначено то же временное пространство имён, тоже сделает это. Раньше такие одновременные попытки очистки могли приводить к взаимоблокировкам, если временная таблица имела зависимость (например, принадлежащую ей последовательность).
Устранение условий гонки при проверке значений замороженных XID для каждого отношения (Ной Миш) §
Вычисление значений замороженных XID для каждой базы данных на основе значений каждого отношения при выполнении команды
VACUUMмогло сбиваться из-за параллельного изменения этих значений другой командойVACUUM.Исправление отчётов об использовании буфера при параллельной очистке (Антонин Боннефой) §
Обращения к буферу, выполняемые параллельными рабочими процессами, не учитывались в статистике, предоставляемой в режиме
VERBOSE.Запрет преобразования таблицы в представление во внешней команде SQL, использующей эту таблицу (Том Лейн) §
Это позволяет избегать сбоев.
Обеспечение применения условий соединения, сгенерированных на основе классов эквивалентности, на правильном уровне плана (Том Лейн) §
В версиях до PostgreSQL 16 сгенерированные условия могли оцениваться ниже внешних соединений, что приводило к неверным результатам запроса, поскольку они должны оцениваться выше (после) внешних соединений. Это касалось всех версий в случаях соединений с конструкциями
UNION ALL, когда в столбце соединения в результате некоторых подзапросовSELECTвозвращались константы.Предотвращение потенциально некорректной оптимизации некоторых оконных функций (Дэвид Роули) §
Оптимизация «условий запуска» была отключена для
ntile()иcount()с непостоянными аргументами. Это позволяет избежать возможного некорректного поведения при выполнении вложенных запросов SELECT, что ранее обычно приводило к таким ошибкам, как «WindowFunc not found in subplan target lists» (оконная функция не найдена в целевом списке подплана).Предотвращение ненужного использования режима движущегося агрегата для окна с неподвижным началом рамки (Валлимахараджан Джи) §
В случаях, когда в качестве оконной функции использовался простой агрегат, а начало рамки окна указывалось как
UNBOUNDED PRECEDING, рамка не могла перемещаться, поэтому не следовало использовать специальный (и более дорогой) режим движущегося агрегата. Данная оптимизация изначально должна была работать, но из-за ошибки в коде никогда не применялась.Предотвращение использования ранее освобождённых данных при планировании соединений на уровне секций GEQO-оптимизатором (Том Лейн) §
Такие случаи обычно приводили к сбою или неожиданному сообщению об ошибке.
Предотвращение освобождения ещё используемых данных в Memoize (Тендер Ван, Андрей Лепихов) §
В производственных сборках эта ошибка зачастую не вызывала никаких проблем, поскольку освобождённые данные, скорее всего, не перезаписывались до использования.
Исправление некорректного отображения кодов для видов статистики в сообщениях об ошибках «requested statistics kind
Xis not yet built» (запрошенный вид статистики X ещё не создан) (Дэвид Роули) §Более аккуратная обработка функций, возвращающих
RECORD, в предложенияхFROM(Том Лейн) § §Выходные столбцы такого вызова функции должны определяться предложением
AS, которое указывает имена столбцов и типы данных. Если фактическое выходное значение функции не соответствует этому указанию, предполагается, что во время выполнения должна выдаваться ошибка. Однако в некоторых местах кода фактическое значение могло проверяться преждевременно, и если оно не соответствовало, могли возникать странные ошибки или сбои проверочных утверждений.Устранение путаницы в отношении типа возвращаемой строки процедур на языке SQL (Том Лейн) §
Процедура, реализованная на языке SQL, которая возвращает один столбец составного типа, могла вызывать сбой проверочного утверждения или аварийный сбой.
Добавление защитных проверок глубины стека в некоторых рекурсивных функциях (Егор Чиндяскин) §
Устранение ошибок округления и возможности переполнения в функции
date_bin()(Моааз Ассали) §В случаях, когда приводимое значение предшествовало временной метке источника и их разность уже была кратна точному шагу, в коде шаг всё равно вычитался неправильно. Кроме того, были выявлены некоторые случаи целочисленного переполнения, которые могли приводить к неверным результатам.
Обнаружение целочисленного переполнения при добавлении или вычитании значений типа
intervalиз значений типаtimestamp(Джозеф Кошаков) §В некоторых случаях, которые должны вызывать ошибку выхода за пределы допустимого диапазона, вместо этого выдавался неверный результат.
Устранение условий гонки в функции
pg_get_expr()(Том Лейн) §Функция должна была возвращать NULL, если параллельно удалялось отношение, на которое ссылался аргумент, но иногда вместо этого выдавалась ошибка.
Устранение ошибки в обнаружении старых идентификаторов транзакций в функциях, касающихся статуса XID (Карина Лицкевич) §
Ранее идентификаторы транзакций больше 231 могли быть ошибочно идентифицированы как последние, что приводило к неправильному поведению функций
pg_xact_status()илиtxid_status().Исключение поведения, при котором карта свободного пространства таблицы возвращает страницу, находящуюся за концом таблицы (Ронан Данклау) §
Поскольку карта свободного пространства не заносится в журнал WAL, ранее такое поведение было возможно в крайних случаях, связанных со сбоем ОС, повышением реплики или восстановлением PITR. В результате выдавалась ошибка «could not read block» (не удалось прочитать блок).
Исправление утечки файлового дескриптора при возникновении ошибки во время ожидания в функции
WaitEventSetWait(Эцуро Фудзита) §Предотвращение повреждения стека исключений, если FDW реализует асинхронное добавление данных, но без настройки условий ожидания для узла плана Append (Александр Пыхалов) §
Вызов ошибки при обращении к индексу во время его перестроения (Том Лейн) §
Раньше при перестроении вызывалось проверочное утверждение, а теперь — обычная ошибка времени выполнения, т. е. при попытке перестроить индекс с некорректным обращением к той же таблице, пользователи сразу увидят более точное сообщение об ошибке.
Обеспечение вывода полностью дополненного значения при сканировании только индекса столбцов
name(Дэвид Роули) §Ранее возвращался указатель на это значение, поскольку физически хранящееся в индексе значение усекается. Это вызывало ошибки при тестировании с использованием valgrind. Теоретически это могло приводить к сбоям, но сообщений о них не поступало.
Устранение условий гонки при принятии решения о необходимости операции синхронизации таблицы в логической репликации (Вигнеш C) §
Событие аннулирования, поступающее во время определения подписчиком, какие таблицы необходимо синхронизировать, игнорировалось, поэтому любые таблицы, нуждающиеся в синхронизации, могли обрабатываться несвоевременно.
Исправление сбоя при выделении памяти объёмом более 4ГБ в DSM (Хейкки Линнакангас) §
Прерывание подключения, если при создании нового сеанса сокет клиента не может быть переведён в неблокирующий режим (Хейкки Линнакангас) §
Раньше теоретически было возможно работать с сокетом, находящимся в блокирующем режиме, но полноценная поддержка такой возможности долгое время отсутствовала, поэтому теперь ошибка выдаётся сразу при установке подключения, а не уже при появлении некорректного поведения.
Устранение некорректных сообщений об ошибках с OpenSSL 3.0.0 и более поздних версий (Хейкки Линнакангас, Том Лейн) §
Ошибки, о которых сообщала система через OpenSSL, выводились в виде числового кода ошибки, а не в читаемом виде.
Предотвращение параллельных вызовов функций
bindtextdomain()в libpq и ecpglib (Том Лейн) § §Хотя в реализации gettext для GNU параллельные вызовы обрабатываются корректно, в доступной для Windows версии могли возникать сбои.
Устранение сбоя в препроцессоре ecpg при попытке программы переопределить макрос, который был определён в командной строке препроцессора (Том Лейн) § § §
Предотвращение выдачи ложных предупреждений «unsupported feature will be passed to server» (неподдерживаемая функция будет передана на сервер) в ecpg (Том Лейн) §
Корректное завершение строк в результатах функции
intoasc()в ecpg нулевым символом (Олег Целебровский) §Предотвращение утечки результатов запроса после его отмены в psql (Том Лейн) §
Это происходило только при отмене непоследнего запроса в строке запроса с разделителями
\;.Исправление в pg_dumpall, чтобы комментарии ролей при их наличии выгружались независимо от параметра
--no-role-passwords(Даниэль Густафссон, Альваро Эррера) §Пропуск файлов с именем
.DS_Storeв pg_basebackup, pg_checksums и pg_rewind (Даниэль Густафссон) §Это позволяет избежать проблем в macOS, где Finder может создавать такие файлы.
Исправление в PL/pgSQL разбора однострочных комментариев (в стиле
--), следующих за выражениями (Эрик Винхольд, Том Лейн) §Это упущение приводило к ошибкам разбора, если такой комментарий следовал за выражением
WHENв операторе PL/pgSQLCASE.Устранение выдачи ложных несовпадений коротких и длинных значений заголовков в
contrib/amcheck(Андрей Бородин, Михаил Жилин)§ §Данные переменной длины в кортеже кучи или индексном кортеже могут иметь короткий или длинный заголовок, в зависимости от параметров сжатия, которые применялись при их создании. Эти значения теперь считаются эквивалентными, и сообщение о несовпадении не выводится.
Устранение ошибок в функциях вывода BRIN (Томаш Вондра) §
Эти функции вывода используются только для отображения записей индекса в
contrib/pageinspect, поэтому ошибки имели ограниченное практическое значение.Исключение запросов на сортировку по константе в
contrib/postgres_fdw(Дэвид Роули) §Это могло происходить в случаях выполнения
UNION ALLс подзапросами, выдающими константу. Сортировка по константе не только бесполезна, но также могла неверно обрабатываться удалённым сервером, что приводило к ошибкам «ORDER BY positionNis not in select list» (в списке выборки ORDER BY нет позиции N).Установка часового пояса
GMT, а неUTCдля удалённого сеанса вcontrib/postgres_fdw(Том Лейн) §На практике результат не поменяется. Однако
GMTраспознаётся жёстко заданным кодом на сервере, аUTCищется в базе данных часовых поясов. Таким образом, в прежней реализации мог происходить сбой в редких случаях, если в базе данных часовых поясов удалённого сервера не хватало записей.Исключение использования в
contrib/xml2библиотечных функций, которые признаны устаревшими в последних версиях libxml2 (Дмитрий Коваль) §Устранение несовместимости с LLVM 18 (Томас Манро, Дмитрий Долгов) §
Возможность
make checkработать с библиотекой С musl (Томас Манро, Брюс Момджян, Том Лейн) §
E.33. Release 15.7
Release date: 2024-05-09
This release contains a variety of fixes from 15.6. For information about new features in major release 15, see Section E.40.
E.33.1. Migration to Version 15.7
A dump/restore is not required for those running 15.X.
However, a security vulnerability was found in the system views pg_stats_ext and pg_stats_ext_exprs, potentially allowing authenticated database users to see data they shouldn't. If this is of concern in your installation, follow the steps in the first changelog entry below to rectify it.
Also, if you are upgrading from a version earlier than 15.6, see Section E.34.
E.33.2. Changes
Restrict visibility of
pg_stats_extandpg_stats_ext_exprsentries to the table owner (Nathan Bossart) §These views failed to hide statistics for expressions that involve columns the accessing user does not have permission to read. View columns such as
most_common_valsmight expose security-relevant data. The potential interactions here are not fully clear, so in the interest of erring on the side of safety, make rows in these views visible only to the owner of the associated table.The PostgreSQL Project thanks Lukas Fittl for reporting this problem. (CVE-2024-4317)
By itself, this fix will only fix the behavior in newly initdb'd database clusters. If you wish to apply this change in an existing cluster, you will need to do the following:
Find the SQL script
fix-CVE-2024-4317.sqlin thesharedirectory of the PostgreSQL installation (typically located someplace like/usr/share/postgresql/). Be sure to use the script appropriate to your PostgreSQL major version. If you do not see this file, either your version is not vulnerable (only v14–v16 are affected) or your minor version is too old to have the fix.In each database of the cluster, run the
fix-CVE-2024-4317.sqlscript as superuser. In psql this would look like\i /usr/share/postgresql/fix-CVE-2024-4317.sql
(adjust the file path as appropriate). Any error probably indicates that you've used the wrong script version. It will not hurt to run the script more than once.
Do not forget to include the
template0andtemplate1databases, or the vulnerability will still exist in databases you create later. To fixtemplate0, you'll need to temporarily make it accept connections. Do that withALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;
and then after fixing
template0, undo it withALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;
Fix
INSERTfrom multipleVALUESrows into a target column that is a domain over an array or composite type (Tom Lane) §Such cases would either fail with surprising complaints about mismatched datatypes, or insert unexpected coercions that could lead to odd results.
Require
SELECTprivilege on the target table forMERGEwith aDO NOTHINGclause (Álvaro Herrera) §SELECTprivilege would be required in all practical cases anyway, but require it even if the query reads no columns of the target table. This avoids an edge case in whichMERGEwould require no privileges whatever, which seems undesirable even when it's a do-nothing command.Fix handling of self-modified tuples in
MERGE(Dean Rasheed) §Throw an error if a target row joins to more than one source row, as required by the SQL standard. (The previous coding could silently ignore this condition if a concurrent update was involved.) Also, throw a non-misleading error if a target row is already updated by a later command in the current transaction, thanks to a
BEFOREtrigger or a volatile function used in the query.Fix incorrect pruning of NULL partition when a table is partitioned on a boolean column and the query has a boolean
IS NOTclause (David Rowley) §A NULL value satisfies a clause such as
, so pruning away a partition containing NULLs yielded incorrect answers.boolcolIS NOT FALSEMake
ALTER FOREIGN TABLE SET SCHEMAmove any owned sequences into the new schema (Tom Lane) §Moving a regular table to a new schema causes any sequences owned by the table to be moved to that schema too (along with indexes and constraints). This was overlooked for foreign tables, however.
Make
ALTER TABLE ... ADD COLUMNcreate identity/serial sequences with the same persistence as their owning tables (Peter Eisentraut) §CREATE UNLOGGED TABLEwill make any owned sequences be unlogged too.ALTER TABLEmissed that consideration, so that an added identity column would have a logged sequence, which seems pointless.Improve
ALTER TABLE ... ALTER COLUMN TYPE's error message when there is a dependent function or publication (Tom Lane) § §In
CREATE DATABASE, recognize strategy keywords case-insensitively for consistency with other options (Tomas Vondra) §Fix
EXPLAIN's counting of heap pages accessed by a bitmap heap scan (Melanie Plageman) §Previously, heap pages that contain no visible tuples were not counted; but it seems more consistent to count all pages returned by the bitmap index scan.
Fix
EXPLAIN's output for subplans inMERGE(Dean Rasheed) §EXPLAINwould sometimes fail to properly display subplan Params referencing variables in other parts of the plan tree.Avoid deadlock during removal of orphaned temporary tables (Mikhail Zhilin) §
If the session that creates a temporary table crashes without removing the table, autovacuum will eventually try to remove the orphaned table. However, an incoming session that's been assigned the same temporary namespace will do that too. If a temporary table has a dependency (such as an owned sequence) then a deadlock could result between these two cleanup attempts.
Avoid race condition while examining per-relation frozen-XID values (Noah Misch) §
VACUUM's computation of per-database frozen-XID values from per-relation values could get confused by a concurrent update of those values by anotherVACUUM.Fix buffer usage reporting for parallel vacuuming (Anthonin Bonnefoy) §
Buffer accesses performed by parallel workers were not getting counted in the statistics reported in
VERBOSEmode.Disallow converting a table to a view within an outer SQL command that is using that table (Tom Lane) §
This avoids possible crashes.
Ensure that join conditions generated from equivalence classes are applied at the correct plan level (Tom Lane) §
In versions before PostgreSQL 16, it was possible for generated conditions to be evaluated below outer joins when they should be evaluated above (after) the outer join, leading to incorrect query results. All versions have a similar hazard when considering joins to
UNION ALLtrees that have constant outputs for the join column in someSELECTarms.Prevent potentially-incorrect optimization of some window functions (David Rowley) §
Disable “run condition” optimization of
ntile()andcount()with non-constant arguments. This avoids possible misbehavior with sub-selects, typically leading to errors like “WindowFunc not found in subplan target lists”.Avoid unnecessary use of moving-aggregate mode with a non-moving window frame (Vallimaharajan G) §
When a plain aggregate is used as a window function, and the window frame start is specified as
UNBOUNDED PRECEDING, the frame's head cannot move so we do not need to use the special (and more expensive) moving-aggregate mode. This optimization was intended all along, but due to a coding error it never triggered.Avoid use of already-freed data while planning partition-wise joins under GEQO (Tom Lane) §
This would typically end in a crash or unexpected error message.
Avoid freeing still-in-use data in Memoize (Tender Wang, Andrei Lepikhov) §
In production builds this error frequently didn't cause any problems, as the freed data would most likely not get overwritten before it was used.
Fix incorrectly-reported statistics kind codes in “requested statistics kind
Xis not yet built” error messages (David Rowley) §Be more careful with
RECORD-returning functions inFROM(Tom Lane) § §The output columns of such a function call must be defined by an
ASclause that specifies the column names and data types. If the actual function output value doesn't match that, an error is supposed to be thrown at runtime. However, some code paths would examine the actual value prematurely, and potentially issue strange errors or suffer assertion failures if it doesn't match expectations.Fix confusion about the return rowtype of SQL-language procedures (Tom Lane) §
A procedure implemented in SQL language that returns a single composite-type column would cause an assertion failure or core dump.
Add protective stack depth checks to some recursive functions (Egor Chindyaskin) §
Fix mis-rounding and overflow hazards in
date_bin()(Moaaz Assali) §In the case where the source timestamp is before the origin timestamp and their difference is already an exact multiple of the stride, the code incorrectly subtracted the stride anyway. Also, detect some integer-overflow cases that would have produced incorrect results.
Detect integer overflow when adding or subtracting an
intervalto/from atimestamp(Joseph Koshakow) §Some cases that should cause an out-of-range error produced an incorrect result instead.
Avoid race condition in
pg_get_expr()(Tom Lane) §If the relation referenced by the argument is dropped concurrently, the function's intention is to return NULL, but sometimes it failed instead.
Fix detection of old transaction IDs in XID status functions (Karina Litskevich) §
Transaction IDs more than 231 transactions in the past could be misidentified as recent, leading to misbehavior of
pg_xact_status()ortxid_status().Ensure that a table's freespace map won't return a page that's past the end of the table (Ronan Dunklau) §
Because the freespace map isn't WAL-logged, this was possible in edge cases involving an OS crash, a replica promote, or a PITR restore. The result would be a “could not read block” error.
Fix file descriptor leakage when an error is thrown while waiting in
WaitEventSetWait(Etsuro Fujita) §Avoid corrupting exception stack if an FDW implements async append but doesn't configure any wait conditions for the Append plan node to wait for (Alexander Pyhalov) §
Throw an error if an index is accessed while it is being reindexed (Tom Lane) §
Previously this was just an assertion check, but promote it into a regular runtime error. This will provide a more on-point error message when reindexing a user-defined index expression that attempts to access its own table.
Ensure that index-only scans on
namecolumns return a fully-padded value (David Rowley) §The value physically stored in the index is truncated, and previously a pointer to that value was returned to callers. This provoked complaints when testing under valgrind. In theory it could result in crashes, though none have been reported.
Fix race condition in deciding whether a table sync operation is needed in logical replication (Vignesh C) §
An invalidation event arriving while a subscriber identifies which tables need to be synced would be forgotten about, so that any tables newly in need of syncing might not get processed in a timely fashion.
Fix crash with DSM allocations larger than 4GB (Heikki Linnakangas) §
Disconnect if a new server session's client socket cannot be put into non-blocking mode (Heikki Linnakangas) §
It was once theoretically possible for us to operate with a socket that's in blocking mode; but that hasn't worked fully in a long time, so fail at connection start rather than misbehave later.
Fix inadequate error reporting with OpenSSL 3.0.0 and later (Heikki Linnakangas, Tom Lane) §
System-reported errors passed through by OpenSSL were reported with a numeric error code rather than anything readable.
Avoid concurrent calls to
bindtextdomain()in libpq and ecpglib (Tom Lane) § §Although GNU gettext's implementation seems to be fine with concurrent calls, the version available on Windows is not.
Fix crash in ecpg's preprocessor if the program tries to redefine a macro that was defined on the preprocessor command line (Tom Lane) § § §
In ecpg, avoid issuing false “unsupported feature will be passed to server” warnings (Tom Lane) §
Ensure that the string result of ecpg's
intoasc()function is correctly zero-terminated (Oleg Tselebrovskiy) §In psql, avoid leaking a query result after the query is cancelled (Tom Lane) §
This happened only when cancelling a non-last query in a query string made with
\;separators.Fix pg_dumpall so that role comments, if present, will be dumped regardless of the setting of
--no-role-passwords(Daniel Gustafsson, Álvaro Herrera) §Skip files named
.DS_Storein pg_basebackup, pg_checksums, and pg_rewind (Daniel Gustafsson) §This avoids problems on macOS, where the Finder may create such files.
Fix PL/pgSQL's parsing of single-line comments (
---style comments) following expressions (Erik Wienhold, Tom Lane) §This mistake caused parse errors if such a comment followed a
WHENexpression in a PL/pgSQLCASEstatement.In
contrib/amcheck, don't report false match failures due to short- versus long-header values (Andrey Borodin, Michael Zhilin) § §A variable-length datum in a heap tuple or index tuple could have either a short or a long header, depending on compression parameters that applied when it was made. Treat these cases as equivalent rather than complaining if there's a difference.
Fix bugs in BRIN output functions (Tomas Vondra) §
These output functions are only used for displaying index entries in
contrib/pageinspect, so the errors are of limited practical concern.In
contrib/postgres_fdw, avoid emitting requests to sort by a constant (David Rowley) §This could occur in cases involving
UNION ALLwith constant-emitting subqueries. Sorting by a constant is useless of course, but it also risks being misinterpreted by the remote server, leading to “ORDER BY positionNis not in select list” errors.Make
contrib/postgres_fdwset the remote session's time zone toGMTnotUTC(Tom Lane) §This should have the same results for practical purposes. However,
GMTis recognized by hard-wired code in the server, whileUTCis looked up in the timezone database. So the old code could fail in the unlikely event that the remote server's timezone database is missing entries.In
contrib/xml2, avoid use of library functions that have been deprecated in recent versions of libxml2 (Dmitry Koval) §Fix incompatibility with LLVM 18 (Thomas Munro, Dmitry Dolgov) §
Allow
make checkto work with the musl C library (Thomas Munro, Bruce Momjian, Tom Lane) §