E.39. Выпуск 12.15
Дата выпуска: 2023-05-11
В этот выпуск вошли различные исправления, внесённые после версии 12.14. За информацией о нововведениях версии 12 обратитесь к Разделу E.54.
E.39.1. Миграция на версию 12.15
Если используется версия 12.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 12.10, см. также Раздел E.44.
E.39.2. Изменения
Устранение уязвимости команды
CREATE SCHEMAпри внесении изменений вsearch_path(Александр Лахин) § §В команде
CREATE SCHEMAобъекты в текущемsearch_path, а также объекты в новой схеме были видны даже внутри вызываемой функции или скрипта, пытающихся задать безопасныйsearch_path. Это потенциально позволяло любому пользователю, имеющему разрешение на создание схемы, перехватить права функции, определяющей контекст безопасности, или скрипта расширения.Проект PostgreSQL благодарит Александра Лахина за сообщение об этой проблеме. (CVE-2023-2454)
Исправление применения политик защиты на уровне строк после встраивания функции, возвращающей множества (Стивен Фрост, Том Лейн) §
Если функция языка SQL, возвращающая множество, обращалась к таблице с политиками защиты на уровне строк и могла быть встроена в вызывающий запрос, эти политики защиты не применялись должным образом в некоторых случаях переиспользования кешированного плана другой ролью. При этом пользователь мог видеть или изменять строки, которые должны были быть невидимыми.
Проект PostgreSQL благодарит Вольфганга Вальтера за сообщение об этой проблеме. (CVE-2023-2455)
Предотвращение сбоев при выполнении
CREATE SCHEMAбез указания имени новой схемы (Микаэль Пакье) §В соответствии со стандартом SQL допускается написание
CREATE SCHEMA AUTHORIZATION, при этом именем схемы становитсяимя_владельцаимя_владельца. Однако в некоторых местах кода требовалось наличие имени схемы, что приводило к сбою.Запрет изменения составных типов, хранящихся в индексах (Том Лейн)
В команде
ALTER TYPEзапрещено использовать несовместимые на двоичном уровне изменения составных типов, хранящихся в каких-либо столбцах таблицы. (Возможно, когда-нибудь это будет разрешено, но пока этого не произошло; последствия блокировок перезаписи множества таблиц пугают.) Ранее не была замечена возможность, что индекс может содержать составной тип, которого нет в таблице этого индекса.Запрет использования системных столбцов как элементов внешних ключей (Том Лейн) §
С тех пор, как системный столбец OID был удалён, использование системных столбцов в качестве элементов внешних ключей не предполагается и в разных местах кода не поддерживается. Поэтому теперь такое использование запрещается, чтобы не исправлять поведение для всех случаев.
Запрет копирования строк дочерних таблиц при выполнении команды
COPY TOдля таблицы с включённой защитой на уровне строк (Антонин Хоуска) §В документации ясно указано, что
COPY TOкопирует строки только из указанной таблицы, а не её дочерних таблиц. Однако если для таблицы была включена защита на уровне строк, это не работало.Предотвращение возможных сбоев при передаче пустого массива функциям
array_position()иarray_positions()(Том Лейн)Исправление возможного чтения за пределами выборки данных функцией
to_char()(Том Лейн) §В особом случае это могло приводить к краху сервера.
Исправление выхода за границу буфера в функции
translate()(Даниил Анисимов) §При использовании возможности удаления функция могла читать из входной строки на один байт больше, чем нужно, что создавало небольшой риск сбоя.
Исправление объявления курсора для ошибок разбора в строковых константах JSON (Том Лейн) §
В большинстве случаев, когда в строковом литерале внутри значения JSON обнаруживалась синтаксическая ошибка, не удавалось правильно установить курсор ошибки. В результате выдавалось бесполезное сообщение об ошибке (указывающее на фрагмент перед строкой, а не на фактическую проблемную зону), а в версии 14 и выше даже мог происходить сбой.
Устранение повреждения данных, вызванного превышением значения переменной
vacuum_defer_cleanup_ageтекущего 64-битного XID (Андрес Фройнд) §В версии 14 и выше при нестандартных значениях
vacuum_defer_cleanup_ageXID горизонта очистки мог оказаться слишком большим, что приводило к удалению ещё живых строк при очистке. В версиях 12 и 13 эта проблема затрагивала только индексы GiST, что могло приводить к досрочной перезаписи страниц индекса.Исправление ошибки анализатора запроса, из-за которой в особых случаях могли не обнаруживаться неправильно вложенные агрегатные функции (Том Лейн) §
В результате данного упущения мог возникать сбой исполнителя при запросах, которые должны были быть отклонены как недопустимые.
Устранение повреждения структуры данных при разборе параметров
SEQUENCE NAME(Дэвид Роули) §Если событийный триггер перехватывал повреждённое дерево запроса, могли возникать проблемы.
Корректное обновление характеристик безопасности распараллеливания узлов плана при перемещении инициализирующих планов с одного узла на другой (Том Лейн) §
В результате данного упущения планировщик мог выдавать ошибки «subplan was not initialized» (подплан не был инициализирован).
Отключение оптимизации обратного перехода для оконных агрегатных функций, когда вызов содержит вложенные операторы SELECT (Дэвид Роули) §
Для данной оптимизации необходимо, чтобы выражения аргументов агрегатной функции возвращали повторяющиеся результаты, что может не выполняться для вложенного SELECT.
Исправление ошибок при выполнении вложенных конструкций
ARRAY[](Александр Лахин, Том Лейн) §Теперь корректно выявляется переполнение общего объёма, необходимого для массива результатов, что позволяет устранить возможный сбой из-за выделения недостаточного объёма для вывода. Кроме того, обеспечивается обнуление любого дополняющего пробела в результирующем массиве; хотя оставлять в нём мусор, как правило, безвредно, позднее это могло приводить к непредсказуемому поведению.
Предотвращение сбоя при изменении поля в столбце массива доменного типа, созданного поверх составного типа (Дмитрий Долгов) §
Исправление логики отсечения секций для секционирования по логическим столбцам (Дэвид Роули) §
Отсечение с таким условием, как
boolcol IS NOT TRUE, выполнялось неправильно, что могло приводить к тому, что строки, в которыхboolcolравен NULL, не возвращались. Кроме того, обрабатывался неправильно довольно редкий случай секционирования приNOT boolcol.Устранение условий гонки при очистке по порциям во время параллельного хеш-соединения (Томас Манро, Мелани Плейгман) §
При неудачном выборе времени и
parallel_leader_participation=off(не являющимся значением по умолчанию) был возможен сбой.Повторное вычисление столбцов
GENERATEDпосле проверки EvalPlanQual (Том Лейн) §В режиме изоляции
READ COMMITTEDмогло потребоваться повторное применение результатов изменения строки к её более новой версии, чем первоначально обнаруженная запросом. В таком случае любые столбцыGENERATEDтеперь вычисляются повторно, если они зависят от столбцов, изменённых параллельно.Отключение балансировки задержки очистки по стоимости, если параметр
vacuum_cost_delayв таблице для каждого отношения равен нулю (Масахико Савада)Балансировка задержки должна отключаться каждый раз, когда автоочистка обрабатывает таблицу с параметром
vacuum_cost_delay, заданным для каждого отношения, но это было реализовано только для положительных значений, не включая ноль.Устранение сбоев в особых случаях при добавлении столбцов в конец представления (Том Лейн) §
Исправление ошибки, редко возникавшей во вложенных планах MULTIEXPR_SUBLINK при изменении секционированных таблиц (Том Лейн) §
Использование синтаксиса
INSERT ... ON CONFLICT DO UPDATE SET (c1, ...) = (SELECT ...)с секционированной целевой таблицей могло приводить к ошибке, если какая-либо дочерняя таблица отличалась от родительской (например, имела другой физический порядок столбцов). Обычно это проявлялось как ошибка при проверке согласованности в исполнителе; но также был возможен сбой или некорректное изменение данных.Исправление обработки маркеров
DEFAULTв многострочном запросеINSERT ... VALUESк представлению с правиломDO ALSO INSERT ... SELECT(Дин Рашид) §Такие случаи обычно заканчивались ошибками «unrecognized node type» (нераспознанный тип узла) или сбоями проверочных утверждений.
Поддержка ссылок на
OLDиNEWв подзапросах внутри действий правил (Дин Рашид, Том Лейн) §Такие ссылки на самом деле являются ссылками
LATERAL, но если подзапрос не был явно помечен какLATERAL, это могло вызывать крах сервера. При необходимости это выполняется неявно.Обеспечение написания правильного псевдонима целевой таблицы при декомпиляции правила или тела SQL-функции, содержащего
INSERT/UPDATE/DELETEвнутриWITH(Том Лейн) §Устранение ошибок в оптимизации
SERIALIZABLE READ ONLY(Томас Манро) § §Транзакции, уже помеченные как «обречённые», запутывали оптимизацию безопасных снимков для транзакций
SERIALIZABLE READ ONLY. В некоторых случаях оптимизация необоснованно пропускалась. В других случаях происходил сбой проверочного утверждения (но в сборках без проверочных утверждений проблем не наблюдалось).Предотвращение утечки слотов обработчика кеша в модуле логического декодирования
pgoutput(Ши Юй) §Несколько циклов запуска и отключения модуля в течение одного сеанса в конечном итоге могли приводить к ошибке «out of relcache_callback_list slots» (нет свободных слотов relcache_callback_list).
Исправление обращения к недействительному указателю при построении индекса GiST с буферизацией (Александр Лахин) §
Эта ошибка должна быть безобидной в обычных сборках, поскольку получаемое значение не является критичным; но потенциально она могла приводить к краху сервера.
Игнорирование удалённых столбцов и генерируемых столбцов во время логической репликации действий изменения или удаления (Ондер Каладжи, Ши Юй) § §
Ранее репликация с параметром
REPLICA IDENTITY FULLзавершалась ошибкой, если таблица содержала такие столбцы.Поддержка сертификатов RSA-PSS со связыванием каналов SCRAM-SHA-256 (Джейкоб Чемпион, Хейкки Линнакангас) §
Для этой функциональности требуется сборка с OpenSSL 1.1.1 или выше. Она влияет как на сервер, так и на libpq.
Устранение условий гонки при отслеживании идентификатора процесса в Windows (Томас Манро) § § §
Операционная система могла повторно использовать PID до того, как управляющий процесс postmaster обнаруживал, что этот дочерний процесс исчез. Это могло приводить к отслеживанию более чем одного дочернего процесса с одним и тем же PID, что вызывало путаницу.
Добавление недостающих кодов состояния в
SPI_result_code_string()(Дин Рашид) §Исправление ошибочных отметок Valgrind для
AllocSetRealloc()(Карина Лицкевич) §В особом случае при уменьшении размера большого (>8КБ) непрерывного блока памяти, выделенного через palloc, сборка под контролем Valgrind могла неправильно отметить состояние памяти, освобождённой от порции, что могло приводить к неверным результатам во время тестирования Valgrind.
Предотвращение сбоя проверочного утверждения при декодировании сообщения логической репликации транзакций (Томаш Вондра) §
Недопущение зависимости от локали при обработке спецсимволов регулярных выражений (Джефф Дэвис) §
Использование обратной косой черты, за которой следовал символ не из кодировки ASCII, иногда могло приводить к сбою проверочного утверждения в зависимости от текущей локали.
Недопущение создания пустых записей WAL в
log_newpage_range(), когда последние несколько страниц в указанном диапазоне пусты (Маттиас ван де Меент) §Не совсем ясно, возможно ли это на практике в выпущенных версиях, но если это так, то мог происходить сбой проверочного утверждения.
Устранение утечки памяти во время существования сеанса в блоках plpgsql
DO, в которых используются выражения приведения типа (Аджит Авекар, Том Лейн) §Уточнение проверки размерности массива при преобразовании структур списка Perl в многомерные массивы SQL (Том Лейн) §
plperl мог вести себя неправильно при несогласованной вложенности списков, когда данные представляли собой не прямоугольный массив значений. В таких случаях теперь возникает ошибка, но раньше они могли приводить к сбою или возвращался мусор.
Уточнение проверки размерности массива при преобразовании структур списка Python в многомерные массивы SQL (Том Лейн) § §
plpython мог вести себя неправильно при работе с пустыми вложенными списками или несогласованной вложенности таких списков, когда данные представляли собой не прямоугольный массив значений. В первом случае должен был выдаваться пустой массив, а во втором — ошибка. Однако в некоторых случаях происходил сбой, а в других выводился неожиданный результат.
Исправление раскрутки стека исключений в plpython (Син Го) §
В редких случаях ошибок очистка стека исключений PG_TRY могла не происходить, что могло приводить к сбою, если другая ошибка возникала до того, как поднимался следующий уровень стека.
Исправление непоследовательной обработки ошибок GSS-шифрования в функции
PQconnectPoll()расширения libpq (Микаэль Пакье)Если для параметра
gssencmodeустановлено значениеrequire, соединение не помечалось как разорванное после сбоя инициализации GSS. Теперь работа немедленно прекращается, как это уже давно было сделано для аналогичного случая с шифрованием TLS.Предупреждение возможного повреждения данных в программах ecpg, собранных с параметром
-C ORACLE(Кётаро Хоригути)При вызове функции
ecpg_get_data()с нулевым значениемvarcharsizeона могла записать завершающий нулевой символ в последний байт предыдущего поля, усекая данные в этом поле.Внесение исправлений в код pg_dump для последующего успешного восстановления секционированных таблиц с хеш-секционированием по столбцу типа-перечисления (Том Лейн) §
Поскольку хеш-коды для значений типа-перечисления зависят от OID, присвоенных перечислению, они обычно отличаются после выгрузки и восстановления, а это означает, что строки часто оказываются не в той секции, где они были изначально. Пользователи могут изменить это поведение, указав параметр
--load-via-partition-root; но поскольку без него шансов на успех почти нет, pg_dump теперь автоматически применяет его к таким таблицам.Кроме того, исправлено поведение pg_restore, чтобы исключить попытки выполнить команду
TRUNCATEдля целевых таблиц перед восстановлением данных в них при использовании--load-via-partition-root. Это позволяет избежать взаимоблокировок и потери данных.Предотвращение сбоев в
contrib/hstore_plpython, если преобразуемое значение Python не является сопоставлением (Дмитрий Долгов, Том Лейн)В таких случаях должна была возникать ошибка, но в Python 3 некоторые API изменились таким образом, что проверка работала неправильно и приводила к сбою.
Исправление неправильного поведения в
contrib/pg_trgmв случае, когда условие регулярного выражения не удовлетворяется (Том Лейн) §Регулярное выражение, такое как
$foo, является допустимым, но невыполнимым; компилятор регулярных выражений распознаёт это и создаёт пустую диаграмму НКА. Попытка оптимизировать такую диаграмму для сканирования индекса GIN или GiST в pg_trgm приводила к выходу за границу рабочего массива, что могло вызывать сбои.Использование параметра
--strip-unneededпри удалении лишнего из статических библиотек GNU-совместимым расширением strip (Том Лейн)Ранее процедура
make install-stripиспользовала в этом случае параметр-x. Это изменение позволяет избежать неправильного поведения llvm-strip, а также немного сокращает вывод.Удаление рекомендаций выполнить автоматическую загрузку файлов DTD для сборки документации и полное отключение такой возможности (Александр Алексеев, Питер Эйзентраут, Том Лейн) §
Теперь нет возможности собирать документацию SGML, не установив файлы DTD DocBook локально. Раньше xsltproc мог загружать эти файлы на лету с sourceforge.net; но sourceforge.net сейчас разрешает доступ только по HTTPS, а ни одна версия xsltproc этого не поддерживает. Поэтому части документации, предполагающие, что это возможно или полезно, были удалены, и вместо этого в рецепты сборки был добавлен параметр xsltproc
--nonet.Использование подходящего расположения для временного каталога
portlockпри проведении TAP-тестов в сборках PGXS (Питер Эйзентраут)Теперь этот каталог создаётся в
tmp_checkв каталоге сборки. Раньше сборки с PGXS пытались создавать его в каталоге установки, который не обязательно был доступен для записи.Обновление данных часовых поясов до версии tzdata 2023c, включающее изменение правил перехода на летнее время в Египте, Гренландии, Марокко и Палестине. §
Для обозначения московского времени в часовых поясах Europe/Kirov и Europe/Volgograd теперь вместо числовых аббревиатур используются аббревиатуры MSK/MSD для согласованности с другими часовыми поясами, использующими московское время. Кроме того, часовой пояс America/Yellowknife теперь идентичен America/Edmonton; это отражается на некоторых временных метках до 1948 года в данной зоне.
E.39. Release 12.15
Release date: 2023-05-11
This release contains a variety of fixes from 12.14. For information about new features in major release 12, see Section E.54.
E.39.1. Migration to Version 12.15
A dump/restore is not required for those running 12.X.
However, if you are upgrading from a version earlier than 12.10, see Section E.44.
E.39.2. Changes
Prevent
CREATE SCHEMAfrom defeating changes insearch_path(Alexander Lakhin) § §Within a
CREATE SCHEMAcommand, objects in the prevailingsearch_path, as well as those in the newly-created schema, would be visible even within a called function or script that attempted to set a securesearch_path. This could allow any user having permission to create a schema to hijack the privileges of a security definer function or extension script.The PostgreSQL Project thanks Alexander Lakhin for reporting this problem. (CVE-2023-2454)
Enforce row-level security policies correctly after inlining a set-returning function (Stephen Frost, Tom Lane) §
If a set-returning SQL-language function refers to a table having row-level security policies, and it can be inlined into a calling query, those RLS policies would not get enforced properly in some cases involving re-using a cached plan under a different role. This could allow a user to see or modify rows that should have been invisible.
The PostgreSQL Project thanks Wolfgang Walther for reporting this problem. (CVE-2023-2455)
Avoid crash when the new schema name is omitted in
CREATE SCHEMA(Michael Paquier) §The SQL standard allows writing
CREATE SCHEMA AUTHORIZATION, with the schema name defaulting toowner_nameowner_name. However some code paths expected the schema name to be present and would fail.Disallow altering composite types that are stored in indexes (Tom Lane) §
ALTER TYPEdisallows non-binary-compatible modifications of composite types if they are stored in any table columns. (Perhaps that will be allowed someday, but it hasn't happened yet; the locking implications of rewriting many tables are daunting.) We overlooked the possibility that an index might contain a composite type that doesn't also appear in its table.Disallow system columns as elements of foreign keys (Tom Lane) §
Since the removal of OID as a system column, there is no plausible use-case for this, and various bits of code no longer support it. Disallow it rather than trying to fix all the cases.
Ensure that
COPY TOfrom an RLS-enabled parent table does not copy any rows from child tables (Antonin Houska) §The documentation is quite clear that
COPY TOcopies rows from only the named table, not any inheritance children it may have. However, if row-level security was enabled on the table then this stopped being true.Avoid possible crash when
array_position()orarray_positions()is passed an empty array (Tom Lane) §Fix possible out-of-bounds fetch in
to_char()(Tom Lane) §With bad luck this could have resulted in a server crash.
Avoid buffer overread in
translate()function (Daniil Anisimov) §When using the deletion feature, the function might fetch the byte just after the input string, creating a small risk of crash.
Fix error cursor setting for parse errors in JSON string literals (Tom Lane) §
Most cases in which a syntax error is detected in a string literal within a JSON value failed to set the error cursor appropriately. This led at least to an unhelpful error message (pointing to the token before the string, rather than the actual trouble spot), and could even result in a crash in v14 and later.
Fix data corruption due to
vacuum_defer_cleanup_agebeing larger than the current 64-bit xid (Andres Freund) §In v14 and later with non-default settings of
vacuum_defer_cleanup_age, it was possible to compute a very large vacuum cleanup horizon xid, leading to vacuum removing rows that are still live. v12 and v13 have a lesser form of the same problem affecting only GiST indexes, which could lead to index pages getting recycled too early.Fix parser's failure to detect some cases of improperly-nested aggregates (Tom Lane) §
This oversight could lead to executor failures for queries that should have been rejected as invalid.
Fix data structure corruption during parsing of serial
SEQUENCE NAMEoptions (David Rowley) §This can lead to trouble if an event trigger captures the corrupted parse tree.
Correctly update plan nodes' parallel-safety markings when moving initplans from one node to another (Tom Lane) §
This planner oversight could lead to “subplan was not initialized” errors at runtime.
Disable the inverse-transition optimization for window aggregates when the call contains sub-SELECTs (David Rowley) §
This optimization requires that the aggregate's argument expressions have repeatable results, which might not hold for a sub-SELECT.
Fix oversights in execution of nested
ARRAY[]constructs (Alexander Lakhin, Tom Lane) §Correctly detect overflow of the total space needed for the result array, avoiding a possible crash due to undersized output allocation. Also ensure that any trailing padding space in the result array is zeroed; while leaving garbage there is harmless for most purposes, it can result in odd behavior later.
Prevent crash when updating a field within an array-of-domain-over-composite-type column (Dmitry Dolgov) §
Fix partition pruning logic for partitioning on boolean columns (David Rowley) §
Pruning with a condition like
boolcol IS NOT TRUEwas done incorrectly, leading to possibly not returning rows in whichboolcolis NULL. Also, the rather unlikely case of partitioning onNOT boolcolwas handled incorrectly.Fix race condition in per-batch cleanup during parallel hash join (Thomas Munro, Melanie Plageman) §
A crash was possible given unlucky timing and
parallel_leader_participation=off(which is not the default).Recalculate
GENERATEDcolumns after an EvalPlanQual check (Tom Lane) §In
READ COMMITTEDisolation mode, the effects of a row update might need to get reapplied to a newer version of the row than the query found originally. If so, we need to recompute anyGENERATEDcolumns, in case they depend on columns that were changed by the concurrent update.Don't balance vacuum cost delay when a table has a per-relation
vacuum_cost_delaysetting of zero (Masahiko Sawada) §Delay balancing is supposed to be disabled whenever autovacuum is processing a table with a per-relation
vacuum_cost_delaysetting, but this was done only for positive settings, not zero.Fix corner-case crashes when columns have been added to the end of a view (Tom Lane) §
Repair rare failure of MULTIEXPR_SUBLINK subplans in partitioned updates (Andres Freund, Tom Lane) §
Use of the syntax
INSERT ... ON CONFLICT DO UPDATE SET (c1, ...) = (SELECT ...)with a partitioned target table could result in failure if any child table is dissimilar from the parent (for example, different physical column order). This typically manifested as failure of consistency checks in the executor; but a crash or incorrect data updates are also possible.Fix handling of
DEFAULTmarkers within a multi-rowINSERT ... VALUESquery on a view that has aDO ALSO INSERT ... SELECTrule (Dean Rasheed) §Such cases typically failed with “unrecognized node type” errors or assertion failures.
Support references to
OLDandNEWwithin subqueries in rule actions (Dean Rasheed, Tom Lane) §Such references are really lateral references, but the server could crash if the subquery wasn't explicitly marked with
LATERAL. Arrange to do that implicitly when necessary.When decompiling a rule or SQL function body containing
INSERT/UPDATE/DELETEwithinWITH, take care to print the correct alias for the target table (Tom Lane) §Fix glitches in
SERIALIZABLE READ ONLYoptimization (Thomas Munro) § §Transactions already marked as “doomed” confused the safe-snapshot optimization for
SERIALIZABLE READ ONLYtransactions. The optimization was unnecessarily skipped in some cases. In other cases an assertion failure occurred (but there was no problem in non-assert builds).Avoid leaking cache callback slots in the
pgoutputlogical decoding plugin (Shi Yu) §Multiple cycles of starting up and shutting down the plugin within a single session would eventually lead to an “out of relcache_callback_list slots” error.
Fix dereference of dangling pointer during buffering build of a GiST index (Alexander Lakhin) §
This error seems to usually be harmless in production builds, as the fetched value is noncritical; but in principle it could cause a server crash.
Ignore dropped columns and generated columns during logical replication of an update or delete action (Onder Kalaci, Shi Yu) § §
Replication with the
REPLICA IDENTITY FULLoption failed if the table contained such columns.Support RSA-PSS certificates with SCRAM-SHA-256 channel binding (Jacob Champion, Heikki Linnakangas) §
This feature requires building with OpenSSL 1.1.1 or newer. Both the server and libpq are affected.
Avoid race condition with process ID tracking on Windows (Thomas Munro) § § §
The operating system could recycle a PID before the postmaster observed that that child process was gone. This could lead to tracking more than one child with the same PID, resulting in confusion.
Add missing cases to
SPI_result_code_string()(Dean Rasheed) §Fix erroneous Valgrind markings in
AllocSetRealloc()(Karina Litskevich) §In the unusual case where the size of a large (>8kB) palloc chunk is decreased, a Valgrind-aware build would mismark the defined-ness state of the memory released from the chunk, possibly causing incorrect results during Valgrind testing.
Avoid assertion failure when decoding a transactional logical replication message (Tomas Vondra) §
Avoid locale sensitivity when processing regular expression escapes (Jeff Davis) §
A backslash followed by a non-ASCII character could sometimes cause an assertion failure, depending on the prevailing locale.
Avoid trying to write an empty WAL record in
log_newpage_range()when the last few pages in the specified range are empty (Matthias van de Meent) §It is not entirely clear whether this case is reachable in released branches, but if it is then an assertion failure could occur.
Fix session-lifespan memory leakage in plpgsql
DOblocks that use cast expressions (Ajit Awekar, Tom Lane) §Tighten array dimensionality checks when converting Perl list structures to multi-dimensional SQL arrays (Tom Lane) §
plperl could misbehave when the nesting of sub-lists is inconsistent so that the data does not represent a rectangular array of values. Such cases now produce errors, but previously they could result in a crash or garbage output.
Tighten array dimensionality checks when converting Python list structures to multi-dimensional SQL arrays (Tom Lane) § §
plpython could misbehave when dealing with empty sub-lists, or when the nesting of sub-lists is inconsistent so that the data does not represent a rectangular array of values. The former should result in an empty output array, and the latter in an error. But some cases resulted in a crash, and others in unexpected output.
Fix unwinding of exception stack in plpython (Xing Guo) §
Some rare failure cases could return without cleaning up the PG_TRY exception stack, risking a crash if another error was raised before the next stack level was unwound.
Fix inconsistent GSS-encryption error handling in libpq's
PQconnectPoll()(Michael Paquier) §With
gssencmodeset torequire, the connection was not marked dead after a GSS initialization failure. Make it fail immediately, as the equivalent case for TLS encryption has long done.Fix possible data corruption in ecpg programs built with the
-C ORACLEoption (Kyotaro Horiguchi) §When
ecpg_get_data()is called withvarcharsizeset to zero, it could write a terminating zero character into the last byte of the preceding field, truncating the data in that field.Fix pg_dump so that partitioned tables that are hash-partitioned on an enum-type column can be restored successfully (Tom Lane) §
Since the hash codes for enum values depend on the OIDs assigned to the enum, they are typically different after a dump and restore, meaning that rows often need to go into a different partition than they were in originally. Users can work around that by specifying the
--load-via-partition-rootoption; but since there is very little chance of success without that, teach pg_dump to apply it automatically to such tables.Also, fix pg_restore to not try to
TRUNCATEtarget tables before restoring into them when--load-via-partition-rootmode is used. This avoids a hazard of deadlocks and lost data.In
contrib/hstore_plpython, avoid crashing if the Python value to be transformed isn't a mapping (Dmitry Dolgov, Tom Lane) §This should give an error, but Python 3 changed some APIs in a way that caused the check to misbehave, allowing a crash to ensue.
Fix misbehavior in
contrib/pg_trgmwith an unsatisfiable regular expression (Tom Lane) §A regex such as
$foois legal but unsatisfiable; the regex compiler recognizes that and produces an empty NFA graph. Attempting to optimize such a graph into a pg_trgm GIN or GiST index qualification resulted in accessing off the end of a work array, possibly leading to crashes.Use the
--strip-unneededoption when stripping static libraries with GNU-compatible strip (Tom Lane) §Previously,
make install-stripused the-xoption in this case. This change avoids misbehavior of llvm-strip, and gives slightly smaller output as well.Stop recommending auto-download of DTD files for building the documentation, and indeed disable it (Aleksander Alekseev, Peter Eisentraut, Tom Lane) §
It appears no longer possible to build the SGML documentation without a local installation of the DocBook DTD files. Formerly xsltproc could download those files on-the-fly from sourceforge.net; but sourceforge.net now permits only HTTPS access, and no common version of xsltproc supports that. Hence, remove the bits of our documentation suggesting that that's possible or useful, and instead add xsltproc's
--nonetoption to the build recipes.When running TAP tests in PGXS builds, use a saner location for the temporary
portlockdirectory (Peter Eisentraut) §Place it under
tmp_checkin the build directory. With the previous coding, a PGXS build would try to place it in the installation directory, which is not necessarily writable.Update time zone data files to tzdata release 2023c for DST law changes in Egypt, Greenland, Morocco, and Palestine. (Tom Lane) §
When observing Moscow time, Europe/Kirov and Europe/Volgograd now use the abbreviations MSK/MSD instead of numeric abbreviations, for consistency with other timezones observing Moscow time. Also, America/Yellowknife is no longer distinct from America/Edmonton; this affects some pre-1948 timestamps in that area.