E.44. Выпуск 12.6

Дата выпуска: 2021-02-11

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

E.44.1. Миграция на версию 12.6

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

Однако обратите внимание на второй и третий пункты в списке изменений, описывающие случаи, в которых рекомендуется перестроить индексы после обновления версии.

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

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

  • Устранение утечки информации в сообщениях об ошибках при нарушении ограничений (Хейкки Линнакангас) §

    Если команда UPDATE пытается переместить строку в другую секцию и обнаруживает, что эта строка нарушает какое-либо ограничение новой секции и столбцы в этой секции располагаются не в том физическом порядке, что в родительской таблице, выдаваемое сообщение об ошибке может включать содержимое столбцов, которые пользователь не должен читать, не имея права SELECT. (CVE-2021-3393)

  • Исправление ошибочной обработки одновременных разделений страниц при добавлении данных в индекс GiST (Хейкки Линнакангас) §

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

  • Добавление в CREATE INDEX CONCURRENTLY ожидания завершения подготовленных транзакций (Андрей Бородин) §

    На этапе, когда команда CREATE INDEX CONCURRENTLY ждёт завершения всех выполняющихся в это время транзакций, чтобы она могла увидеть добавленные ими строки, она с той же целью должна дожидаться завершения и всех подготовленных транзакций. В противном случае строки, добавленные подготовленными транзакциями, могут не попасть в новый индекс, вследствие чего запросы, использующие этот индекс, не будут их видеть. В инсталляциях, где включены подготовленные транзакции (max_prepared_transactions > 0), рекомендуется перестроить все ранее построенные в неблокирующем режиме индексы, если их могла затронуть эта проблема.

  • Устранение сбоя при выполнении оператора CALL или DO, осуществляющего откат транзакции, по расширенному протоколу запросов (Томас Манро, Том Лейн) §

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

  • Исправление логики отсечения секций при обработке асимметричных наборов секций с секционированием по хешу (Том Лейн) §

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

  • Недопущение ошибочных результатов при применении WHERE CURRENT OF к курсору, план выполнения которого содержит узел MergeAppend (Том Лейн)

    Такая конструкция не поддерживается (вообще говоря, курсор с ORDER BY не обязательно будет поддерживать простое изменение); ранее её не запрещалось использовать, но это было чревато незаметными ошибками.

  • Устранение сбоя при применении WHERE CURRENT OF к курсору, план выполнения которого содержит нестандартный узел сканирования (Дэвид Гейер) §

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

    Ошибка происходила, в частности, с простейшими подзапросами, содержащими отложенные ссылки на результаты внешнего соединения, и приводила к построению некорректного плана. Известны случаи, когда в результате выдавалось сообщение об ошибке «failed to assign all NestLoopParams to plan nodes» (не удалось назначить все элементы NestLoopParams узлам плана), но возможны и другие проявления.

  • Исправление обработки местозаполнителей в ходе удаления ненужных результирующих RTE (Том Лейн) §

    В результате упущения планировщик мог выдавать ошибки «no relation entry for relid N» (не найден элемент отношения с номером N).

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

    В результате данного упущения планировщик мог выдавать ошибки «failed to build any N-way joins» (не удалось построить никакие N-сторонние соединения).

  • Проверка поддержки пометки/восстановления позиций индексными методами доступа (Эндрю Гирт) §

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

  • Изменение параметров для решения проблемы нехватки слотов DSM при очень активном использовании параллельных запросов (Томас Манро) §

  • Исправление завышенной оценки объёма общей памяти, требующегося для параллельных запросов (Такаюки Цунакава) §

  • Обеспечение корректной обработки в команде ALTER DEFAULT PRIVILEGES повторяющихся аргументов (Микаэль Пакье) §

    Ранее в случае повторения имени роли или схемы в одной команде могли выдаваться ошибки «tuple already updated by self» (кортеж уже изменился сам собой) или нарушаться ограничения уникальности.

  • Осуществление сброса связанных с ACL кешей при изменениях в pg_authid (Ной Миш) §

    Тем самым гарантируется, что решения, связанные с правами доступа, будут приниматься с учётом действия ALTER ROLE ... [NO] INHERIT.

  • Предотвращение некорректной обработки неоднозначных предложений CREATE TABLE LIKE (Том Лейн) §

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

  • Изменение порядка действий в CREATE TABLE LIKE, чтобы индексы копировались до создания ограничений внешнего ключа (Том Лейн)

    Теперь случай, когда ограничение внешнего ключа, объявленное на внешнем уровне CREATE TABLE и ссылающееся на саму таблицу, зависит от индекса, создаваемого предложением LIKE, обрабатывается корректно.

  • Запрет выполнения CREATE STATISTICS с системными каталогами (Томаш Вондра) §

  • Недопущение преобразования наследуемой дочерней таблицы в представление (Том Лейн) §

  • Обеспечение корректного освобождения дискового пространства, выделенного для удаляемого отношения, при фиксировании транзакции (Томас Манро) §

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

  • Недопущение удаления табличного пространства, на которое ссылается секционированное отношение, но не хранит в нём свои данные (Альваро Эррера)

    Ранее удаление в таких условиях допускалось, но при последующих операциях с секционированным отношением возникали ошибки.

  • Исправление расчёта прогресса при выполнении CLUSTER (Маттиас ван де Меент) §

  • Исправление обработки многобайтовых символов, экранированных обратной косой чертой, в COPY FROM (Хейкки Линнакангас) §

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

  • Отказ от ненужного создания хеш-таблиц для исполнителя при выполнении EXPLAIN без ANALYZE (Алексей Баштанов) §

  • Устранение недавно привнесённых условий гонки при обработке очереди LISTEN/NOTIFY (Том Лейн) §

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

    Указатель на хвост очереди мог получить значение, не соответствующее позиции ни одного из процессов, в результате чего логика очистки очереди фактически отключалась. Продолжающиеся вызовы NOTIFY затем приводили к появлению предупреждений о переполнении очереди, и в конце концов передача уведомлений полностью останавливалась до перезапуска сервера.

  • Реализация поддержки всех возможных сочетаний типов JSON оператором конкатенации jsonb (Том Лейн) §

    До этого поддерживалась конкатенация двух объектов или двух массивов JSON. Теперь обрабатываются и другие случаи — отличные от массивов аргументы помещаются в одноэлементные массивы, которые затем складываются. Ранее некоторые сочетания аргументов обрабатывались по этому принципу, а с другими возникали ошибки.

  • Исправление ошибки обращения к неинициализированному значению при разборе квантификатора * в регулярном выражении в режиме BRE (Том Лейн) §

    В результате ошибки этот квантификатор мог работать как «нежадный», то есть как квантификатор *? в расширенных регулярных выражениях.

  • Исправления поведения power() со значением numeric, равным INT_MIN (-2147483648) (Дин Рашид) § §

    Ранее для такого числа возвращался результат без значимых цифр.

  • Устранение целочисленного переполнения в функциях substring() (Том Лейн. Павел Стехуле) §

    Когда сумма заданной начальной позиции и длины выходила за границы целого, поведение функции substring() было некорректным — она либо выдавала ошибку «negative substring length» (отрицательная длина подстроки), тогда как должна была успешно отработать, либо игнорировала действительно отрицательную длину (и в большинстве случаев возвращала всю строку).

  • Предотвращение возможной потери данных вследствие некорректного определения позиции зацикливания в журнале SLRU (Ной Миш) §

    Позиция зацикливания обычно оказывается в середине страницы и должна округляться до границы страницы, однако это делалось неправильно. Негативные последствия это могло иметь, только если SLRU-кеш переполнялся в пределах одной страницы, что маловероятно в правильно функционирующей системе. Проявляться это могло в последующих ошибках «apparent wraparound» (видимо, произошло зацикливание) и «could not access status of transaction» (не удалось получить состояние транзакции).

  • Устранение утечек памяти в процессах walsender при передаче новых снимков для логического декодирования (Амит Капила) §

  • Исправление поведения walsender при получении дополнительных команд после завершения репликации (Джефф Девис) §

  • Выявление взаимоблокировок, возможных между серверами горячего резерва и стартовым процессом (применяющим WAL) (Фудзии Масао) §

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

  • Обеспечение надёжного обнаружения конфликтов восстановления при удалении из индекса записи, ссылающейся на элемент в цепочке HOT (Питер Гейган) § §

    Ранее код не проходил по цепочке HOT и поэтому мог получить неактуальный горизонт XID, вследствие чего могли возникать конфликты при обработке изменений на ведомом сервере. На практике эффект ошибки был ограниченным, так как в большинстве случаев правильный горизонт вычислялся в сопутствующих операциях.

  • Безусловное переопределение значения KRB5_KTNAME в переменных окружения сервера любым непустым значением параметра krb_server_keyfile (Том Лейн) §

    Ранее приоритетность зависела от того, запросил ли клиент шифрование GSS.

  • Добавление в сообщения, выводимые в журнал сервера в случае невозможности сопоставить соединение с записями pg_hba.conf, информации о том, включено ли шифрование GSS (Кётаро Хоригути, Том Лейн) §

    Эта информация полезна при наличии в pg_hba.conf записей hostgssenc или hostnogssenc.

  • Устранение разнообразных дефектов в реализации шифрования GSS на стороне сервера (Том Лейн)

    Отказ от бессмысленного требования использовать исключительно GSS-аутентификацию в случае применения шифрования GSS. Добавление сведений о шифровании GSS в выводимые в журнал сообщения о подключениях. Включение объёма памяти, требующейся для GSS, в расчёт суммарного необходимого объёма общей памяти (ранее могли возникать проблемы при очень больших значениях max_connections). Предотвращение бесконечной рекурсии, возможной ранее при попытке выдать сообщение о критической ошибке шифрования GSS.

  • Обеспечение очистки необработанных запросов к фоновым рабочим процессам в начале процедуры выключения в режимах «smart» и «fast» (Том Лейн) §

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

  • Устранение платформенных особенностей при разборе значений recovery_target_xid (Микаэль Пакье) §

    Целевой XID может задаваться как 64-битное значение, а для его разбора использовалась функция strtoul(), неподходящая для этого на платформах, где long имеет размер 32 бита (например, в Windows).

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

  • Наделение индексных МД возможностью поддерживать неключевые столбцы и при этом поддерживать только один ключевой столбец (Том Лейн) §

  • Устранения сбоя утверждения истинности при параллельном агрегировании с нестрогой функцией десериализации (Эндрю Гирт) §

    Таких агрегатных функций нет в ядре PostgreSQL, но они есть в некоторых расширениях, например, в PostGIS. В сборках без утверждений истинности эта ошибка в любом случае была безвредна.

  • Устранение сбоя утверждения истинности в pg_get_functiondef() при анализе функции с указанием TRANSFORM (Том Лейн)

  • Исправление ошибочного выделения структуры данных в операторе CALL языка PL/pgSQL (Том Лейн) § §

    Команда CALL, вызывающая из одной процедуры PL/pgSQL другую, имеющую параметры OUT, прерывалась ошибкой, если вызываемая процедура выполняла COMMIT или ROLLBACK.

  • Добавление в libpq возможности перейти к SSL-шифрованию в случае неудачи с GSS (Том Лейн) §

    Ранее, если зашифрованное GSS соединение было установлено успешно, но затем произошла ошибка в процессе аутентификации, вместо перехода к SSL устанавливалось незашифрованное соединение. В результате либо могли иметь место неожиданные ошибки соединений, либо незаметно использовалось незащищённое соединение, тогда как ожидалось именно защищённое. Благо GSS-шифрование могло включиться успешно, только если и клиент, и сервер имели действительные билеты в одной инфраструктуре Kerberos. Кажется маловероятным, что в таком окружении будет обязательным использование SSL-шифрования.

  • Восстановление в psql возможности передавать пароль в аргументе строка_соединения команды \connect (Том Лейн) §

    Это работало раньше, но в результате недавнего исправления этот пароль перестал восприниматься (и поэтому запрашивался дополнительно).

  • Избавление от ограничения ширины выводимых командами psql \d значений столбцов по умолчанию (Том Лейн) §

    Ранее эти значения обрезались по ширине 128 символов.

  • Устранение разнообразных дефектов в реализации команды psql \help (Кётаро Хоригути, Том Лейн) §

    Команда \help с двумя словами в аргументах не могла найти описание команды только для первого слова. Например, команда \help reset all должна была показать справку по RESET, но она этого не делала. Кроме того, \help в ряде случаев не вызывала постраничник, тогда как должна была. Наконец, в прежней реализации имелись утечки памяти.

  • Исправление в pg_dump выгрузки наследуемых генерируемых столбцов (Питер Эйзентраут) §

    Предыдущее поведение приводило к ошибкам при восстановлении (не критичным).

  • Изменение поведения pg_dump с тем, чтобы в скрипте восстановления команды ALTER PUBLICATION ADD TABLE выполнялись от имени владельца публикации, а команды ALTER INDEX ATTACH PARTITION — от имени владельца секционированного индекса (Том Лейн) § §

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

  • Исправление в pg_dump обработки указаний WITH GRANT OPTION в изначально устанавливаемых правах в расширениях (Ной Миш) §

    В случае, когда скрипт расширения создаёт объект и даёт права доступа к нему с правом передачи, а пользователь затем отзывает эти права, pg_dump не мог выдать корректный SQL восстановления состояния. (Эта проблема если и затрагивает, то лишь немногие расширения.)

  • Рассмотрение в процедуре pg_rewind всех требующихся WAL-файлов при синхронизации резервного сервера (Иэн Барвик, Хейкки Линнакангас) § § §

  • Запрет использования в pgbench имён переменных, начинающихся с цифры (Фабьен Коэльо) §

    Таким образом, pgbench не будет пытаться подставлять переменные в значения времени, которые могут содержать строки вида 12:34.

  • Передача имени корректной базы данных в сообщениях об ошибках подключения, выдаваемых некоторых клиентскими программами (Альваро Эррера) §

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

  • Устранение утечки памяти в contrib/auto_explain (Ли Япинь)

    Память, занятая в процессе формирования вывода EXPLAIN, не освобождалась до конца текущей транзакции (для оператора верхнего уровня) или до завершения внешнего оператора (для вложенного оператора). В частности это создавало проблемы при включённом параметре log_nested_statements.

  • Устранение в contrib/postgres_fdw утечки открытых подключений к внешним серверам при удалении сопоставлений пользователей или объекта стороннего сервера (Бхарат Рупиредди) §

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

  • Добавление в contrib/pgcrypto проверки кода возврата, выдаваемого функциями OpenSSL EVP (Микаэль Пакье) §

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

  • Повышение стабильности contrib/pg_prewarm в случае остановки кластера до завершения разогрева (Том Лейн) §

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

  • Предотвращения сбоя в коде поддержки индексов GiST в модуле contrib/pg_trgm, происходившего в редком случае вызова функции picksplit для разделения ровно двух элементов (Эндрю Гирт, Александр Коротков) §

  • Исправление расчёта тайм-аутов в contrib/pg_prewarm и contrib/postgres_fdw (Алексей Кондратов, Том Лейн)

    В основном цикле главного процесса contrib/pg_prewarm ошибочно вычислялась задержка в 1000 раз меньше ожидаемой, вследствие чего он создавал лишнюю нагрузку для процессора. Ожидая результата от удалённого сервера, модуль contrib/postgres_fdw устанавливал вместо желаемого тайм-аута в 1000 раз больший (хотя эта ошибка нивелировалась 60-секундным ограничением сверху).

    Обе эти ошибки были следствием неправильного пересчёта секунд с микросекундами в миллисекунды. Чтобы в будущем таких ошибок не было, добавлена удобная функция TimestampDifferenceMilliseconds().

  • Улучшение логики configure в части выбора PG_SYSROOT в macOS (Том Лейн) § §

    Новый подход с большей вероятностью даст желаемый результат в случаях, когда Xcode новее нижележащей операционной системы. В случае выбора sysroot, не соответствующего версии ОС, скомпилированные программы могут не работать.

  • Добавление при сборке в macOS ключа -isysroot на этапах компоновки и компиляции (Джеймс Хиллиард) §

    Это должно помогать в ситуациях, когда версия Xcode не согласуется с версией операционной системы.

  • Исправление компиляции JIT для обеспечение совместимости с LLVM 11 и LLVM 12 (Андрес Фройнд) § §

  • Исправление ошибок в обработке ссылок на логические переменные при компиляции выражений JIT (Андрес Фройнд) §

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

  • Исправление ошибки компиляции с ICU версии 68 или новее (Том Лейн) §

  • Исключение вызова memcpy() с равным NULL указателем источника и нулевым размером при создании секционированного индекса (Альваро Эррера) §

    Хотя сам по себе такой вызов не считается опасным, некоторые компиляторы полагают, что аргументы memcpy() всегда отличны от NULL, и вследствие этого могут некорректно оптимизировать соседний код.

  • Обновление данных часовых поясов до версии tzdata 2021a, включающее изменение правил перехода на летнее время в России (смену часового пояса в Волгограде) и Южном Судане, а также корректировку исторических данных для Австралии, Багам, Белиза, Бермуд, Ганы, Израиля, Кении, Нигерии, Палестины, Сейшел и Вануату.

    В частности, часовой пояс Australia/Currie был признан равнозначным Australia/Hobart и ненужным.

E.44. Release 12.6

Release date: 2021-02-11

This release contains a variety of fixes from 12.5. For information about new features in major release 12, see Section E.50.

E.44.1. Migration to Version 12.6

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

However, see the second and third changelog items below, which describe cases in which reindexing indexes after the upgrade may be advisable.

Also, if you are upgrading from a version earlier than 12.2, see Section E.48.

E.44.2. Changes

  • Fix information leakage in constraint-violation error messages (Heikki Linnakangas) §

    If an UPDATE command attempts to move a row to a different partition but finds that it violates some constraint on the new partition, and the columns in that partition are in different physical positions than in the parent table, the error message could reveal the contents of columns that the user does not have SELECT privilege on. (CVE-2021-3393)

  • Fix incorrect detection of concurrent page splits while inserting into a GiST index (Heikki Linnakangas) §

    Concurrent insertions could lead to a corrupt index with entries placed in the wrong pages. It's recommended to reindex any GiST index that's been subject to concurrent insertions.

  • Fix CREATE INDEX CONCURRENTLY to wait for concurrent prepared transactions (Andrey Borodin) §

    At the point where CREATE INDEX CONCURRENTLY waits for all concurrent transactions to complete so that it can see rows they inserted, it must also wait for all prepared transactions to complete, for the same reason. Its failure to do so meant that rows inserted by prepared transactions might be omitted from the new index, causing queries relying on the index to miss such rows. In installations that have enabled prepared transactions (max_prepared_transactions > 0), it's recommended to reindex any concurrently-built indexes in case this problem occurred when they were built.

  • Avoid crash when a CALL or DO statement that performs a transaction rollback is executed via extended query protocol (Thomas Munro, Tom Lane) §

    In PostgreSQL 13, this case reliably caused a null-pointer dereference. In earlier versions the bug seems to have no visible symptoms, but it's not quite clear that it could never cause a problem.

  • Fix partition pruning logic to handle asymmetric hash partition sets (Tom Lane) §

    If a hash-partitioned table has unequally-sized partitions (that is, varying modulus values), or it lacks partitions for some remainder values, then the planner's pruning logic could mistakenly conclude that some partitions don't need to be scanned, leading to failure to find rows that the query should find.

  • Avoid incorrect results when WHERE CURRENT OF is applied to a cursor whose plan contains a MergeAppend node (Tom Lane) §

    This case is unsupported (in general, a cursor using ORDER BY is not guaranteed to be simply updatable); but the code previously did not reject it, and could silently give false matches.

  • Fix crash when WHERE CURRENT OF is applied to a cursor whose plan contains a custom scan node (David Geier) §

  • Fix planner's mishandling of placeholders whose evaluation should be delayed by an outer join (Tom Lane) §

    This occurs in particular with trivial subqueries containing lateral references to outer-join outputs. The mistake could result in a malformed plan. The known cases trigger a failed to assign all NestLoopParams to plan nodes error, but other symptoms may be possible.

  • Fix planner's handling of placeholders during removal of useless RESULT RTEs (Tom Lane) §

    This oversight could lead to no relation entry for relid N planner errors.

  • Fix planner's handling of a placeholder that is computed at some join level and used only at that same level (Tom Lane) §

    This oversight could lead to failed to build any N-way joins planner errors.

  • Be more careful about whether index AMs support mark/restore (Andrew Gierth) §

    This prevents errors about missing support functions in rare edge cases.

  • Adjust settings to make it more difficult to run out of DSM slots during heavy usage of parallel queries (Thomas Munro) §

  • Fix overestimate of the amount of shared memory needed for parallel queries (Takayuki Tsunakawa) §

  • Fix ALTER DEFAULT PRIVILEGES to handle duplicated arguments safely (Michael Paquier) §

    Duplicate role or schema names within the same command could lead to tuple already updated by self errors or unique-constraint violations.

  • Flush ACL-related caches when pg_authid changes (Noah Misch) §

    This change ensures that permissions-related decisions will promptly reflect the results of ALTER ROLE ... [NO] INHERIT.

  • Prevent misprocessing of ambiguous CREATE TABLE LIKE clauses (Tom Lane) §

    A LIKE clause is re-examined after initial creation of the new table, to handle importation of indexes and such. It was possible for this re-examination to find a different table of the same name, causing unexpected behavior; one example is where the new table is a temporary table of the same name as the LIKE target.

  • Rearrange order of operations in CREATE TABLE LIKE so that indexes are cloned before building foreign key constraints (Tom Lane) §

    This fixes the case where a self-referential foreign key constraint declared in the outer CREATE TABLE depends on an index that's coming from the LIKE clause.

  • Disallow CREATE STATISTICS on system catalogs (Tomas Vondra) §

  • Disallow converting an inheritance child table to a view (Tom Lane) §

  • Ensure that disk space allocated for a dropped relation is released promptly at commit (Thomas Munro) §

    Previously, if the dropped relation spanned multiple 1GB segments, only the first segment was truncated immediately. Other segments were simply unlinked, which doesn't authorize the kernel to release the storage so long as any other backends still have the files open.

  • Prevent dropping a tablespace that is referenced by a partitioned relation, but is not used for any actual storage (Álvaro Herrera) §

    Previously this was allowed, but subsequent operations on the partitioned relation would fail.

  • Fix progress reporting for CLUSTER (Matthias van de Meent) §

  • Fix handling of backslash-escaped multibyte characters in COPY FROM (Heikki Linnakangas) §

    A backslash followed by a multibyte character was not handled correctly. In some client character encodings, this could lead to misinterpreting part of a multibyte character as a field separator or end-of-copy-data marker.

  • Avoid preallocating executor hash tables in EXPLAIN without ANALYZE (Alexey Bashtanov) §

  • Fix recently-introduced race conditions in LISTEN/NOTIFY queue handling (Tom Lane) §

    A newly-listening backend could attempt to read SLRU pages that were in process of being truncated, possibly causing an error.

    The queue tail pointer could become set to a value that's not equal to the queue position of any backend, resulting in effective disabling of the queue truncation logic. Continued use of NOTIFY then led to queue-fill warnings, and eventually to inability to send any more notifies until the server is restarted.

  • Allow the jsonb concatenation operator to handle all combinations of JSON data types (Tom Lane) §

    We can concatenate two JSON objects or two JSON arrays. Handle other cases by wrapping non-array inputs in one-element arrays, then performing an array concatenation. Previously, some combinations of inputs followed this rule but others arbitrarily threw an error.

  • Fix use of uninitialized value while parsing a * quantifier in a BRE-mode regular expression (Tom Lane) §

    This error could cause the quantifier to act non-greedy, that is behave like a *? quantifier would do in full regular expressions.

  • Fix numeric power() for the case where the exponent is exactly INT_MIN (-2147483648) (Dean Rasheed) § §

    Previously, a result with no significant digits was produced.

  • Fix integer-overflow cases in substring() functions (Tom Lane, Pavel Stehule) §

    If the specified starting index and length overflow an integer when added together, substring() misbehaved, either throwing a bogus negative substring length error for a case that should succeed, or failing to complain that a negative length is negative (and instead returning the whole string, in most cases).

  • Prevent possible data loss from incorrect detection of the wraparound point of an SLRU log (Noah Misch) §

    The wraparound point typically falls in the middle of a page, which must be rounded off to a page boundary, and that was not done correctly. No issue could arise unless an installation had gotten to within one page of SLRU overflow, which is unlikely in a properly-functioning system. If this did happen, it would manifest in later apparent wraparound or could not access status of transaction errors.

  • Fix memory leak in walsender processes while sending new snapshots for logical decoding (Amit Kapila) §

  • Fix walsender to accept additional commands after terminating replication (Jeff Davis) §

  • Ensure detection of deadlocks between hot standby backends and the startup (WAL-application) process (Fujii Masao) §

    The startup process did not run the deadlock detection code, so that in situations where the startup process is last to join a circular wait situation, the deadlock might never be recognized.

  • Fix possible failure to detect recovery conflicts while deleting an index entry that references a HOT chain (Peter Geoghegan) § §

    The code failed to traverse the HOT chain and might thus compute a too-old XID horizon, which could lead to incorrect conflict processing in hot standby. The practical impact of this bug is limited; in most cases the correct XID horizon would be found anyway from nearby operations.

  • Ensure that a nonempty value of krb_server_keyfile always overrides any setting of KRB5_KTNAME in the server's environment (Tom Lane) §

    Previously, which setting took precedence depended on whether the client requests GSS encryption.

  • In server log messages about failing to match connections to pg_hba.conf entries, include details about whether GSS encryption has been activated (Kyotaro Horiguchi, Tom Lane) §

    This is relevant data if hostgssenc or hostnogssenc entries exist.

  • Fix assorted issues in server's support for GSS encryption (Tom Lane) §

    Remove pointless restriction that only GSS authentication can be used on a GSS-encrypted connection. Add GSS encryption information to connection-authorized log messages. Include GSS-related space when computing the required size of shared memory (this omission could have caused problems with very high max_connections settings). Avoid possible infinite recursion when reporting an unrecoverable GSS encryption error.

  • Ensure that unserviced requests for background workers are cleaned up when the postmaster begins a smart or fast shutdown sequence (Tom Lane) §

    Previously, there was a race condition whereby a child process that had requested a background worker just before shutdown could wait indefinitely, preventing shutdown from completing.

  • Fix portability problem in parsing of recovery_target_xid values (Michael Paquier) §

    The target XID is potentially 64 bits wide, but it was parsed with strtoul(), causing misbehavior on platforms where long is 32 bits (such as Windows).

  • Avoid trying to use parallel index build in a standalone backend (Yulin Pei) §

  • Allow index AMs to support included columns without necessarily supporting multiple key columns (Tom Lane) §

  • Avoid assertion failure during parallel aggregation of an aggregate with a non-strict deserialization function (Andrew Gierth) §

    No such aggregate functions exist in core PostgreSQL, but some extensions such as PostGIS provide some. The mistake is harmless anyway in a non-assert build.

  • Avoid assertion failure in pg_get_functiondef() when examining a function with a TRANSFORM option (Tom Lane) §

  • Fix data structure misallocation in PL/pgSQL's CALL statement (Tom Lane) § §

    A CALL in a PL/pgSQL procedure, to another procedure that has OUT parameters, would fail if the called procedure did a COMMIT or ROLLBACK.

  • In libpq, do not skip trying SSL after GSS encryption (Tom Lane) §

    If we successfully made a GSS-encrypted connection, but then failed during authentication, we would fall back to an unencrypted connection rather than next trying an SSL-encrypted connection. This could lead to unexpected connection failure, or to silently getting an unencrypted connection where an encrypted one is expected. Fortunately, GSS encryption could only succeed if both client and server hold valid tickets in the same Kerberos infrastructure. It seems unlikely for that to be true in an environment that requires SSL encryption instead.

  • In psql, re-allow including a password in a connection_string argument of a \connect command (Tom Lane) §

    This used to work, but a recent bug fix caused the password to be ignored (resulting in prompting for a password).

  • In psql's \d commands, don't truncate the display of column default values (Tom Lane) §

    Formerly, they were arbitrarily truncated at 128 characters.

  • Fix assorted bugs in psql's \help command (Kyotaro Horiguchi, Tom Lane) §

    \help with two argument words failed to find a command description using only the first word, for example \help reset all should show the help for RESET but did not. Also, \help often failed to invoke the pager when it should. It also leaked memory.

  • Fix pg_dump's dumping of inherited generated columns (Peter Eisentraut) §

    The previous behavior resulted in (harmless) errors during restore.

  • In pg_dump, ensure that the restore script runs ALTER PUBLICATION ADD TABLE commands as the owner of the publication, and similarly runs ALTER INDEX ATTACH PARTITION commands as the owner of the partitioned index (Tom Lane) § §

    Previously, these commands would be run by the role that started the restore script; which will usually work, but in corner cases that role might not have adequate permissions.

  • Fix pg_dump to handle WITH GRANT OPTION in an extension's initial privileges (Noah Misch) §

    If an extension's script creates an object and grants privileges on it with grant option, then later the user revokes such privileges, pg_dump would generate incorrect SQL for reproducing the situation. (Few if any extensions do this today.)

  • In pg_rewind, ensure that all WAL is accounted for when rewinding a standby server (Ian Barwick, Heikki Linnakangas) § § §

  • In pgbench, disallow a digit as the first character of a variable name (Fabien Coelho) §

    This prevents trying to substitute variables into timestamp literal values, which may contain strings like 12:34.

  • Report the correct database name in connection failure error messages from some client programs (Álvaro Herrera) §

    If the database name was defaulted rather than given on the command line, pg_dumpall, pgbench, oid2name, and vacuumlo would produce misleading error messages after a connection failure.

  • Fix memory leak in contrib/auto_explain (Japin Li) §

    Memory consumed while producing the EXPLAIN output was not freed until the end of the current transaction (for a top-level statement) or the end of the surrounding statement (for a nested statement). This was particularly a problem with log_nested_statements enabled.

  • In contrib/postgres_fdw, avoid leaking open connections to remote servers when a user mapping or foreign server object is dropped (Bharath Rupireddy) §

    Open connections that depend on a dropped user mapping or foreign server can no longer be referenced, but formerly they were kept around anyway for the duration of the local session.

  • In contrib/pgcrypto, check for error returns from OpenSSL's EVP functions (Michael Paquier) §

    We do not really expect errors here, but this change silences warnings from static analysis tools.

  • Make contrib/pg_prewarm more robust when the cluster is shut down before prewarming is complete (Tom Lane) §

    Previously, autoprewarm would rewrite its status file with only the block numbers that it had managed to load so far, thus perhaps largely disabling the prewarm functionality in the next startup. Instead, suppress status file updates until the initial loading pass is complete.

  • In contrib/pg_trgm's GiST index support, avoid crash in the rare case that picksplit is called on exactly two index items (Andrew Gierth, Alexander Korotkov) §

  • Fix miscalculation of timeouts in contrib/pg_prewarm and contrib/postgres_fdw (Alexey Kondratov, Tom Lane) §

    The main loop in contrib/pg_prewarm's autoprewarm parent process underestimated its desired sleep time by a factor of 1000, causing it to consume much more CPU than intended. When waiting for a result from a remote server, contrib/postgres_fdw overestimated the desired timeout by a factor of 1000 (though this error had been mitigated by imposing a clamp to 60 seconds).

    Both of these errors stemmed from incorrectly converting seconds-and-microseconds to milliseconds. Introduce a new API TimestampDifferenceMilliseconds() to make it easier to get this right in the future.

  • Improve configure's heuristics for selecting PG_SYSROOT on macOS (Tom Lane) § §

    The new method is more likely to produce desirable results when Xcode is newer than the underlying operating system. Choosing a sysroot that does not match the OS version may result in nonfunctional executables.

  • While building on macOS, specify -isysroot in link steps as well as compile steps (James Hilliard) §

    This likewise improves the results when Xcode is out of sync with the operating system.

  • Fix JIT compilation to be compatible with LLVM 11 and LLVM 12 (Andres Freund) § §

  • Fix potential mishandling of references to boolean variables in JIT expression compilation (Andres Freund) §

    No field reports attributable to this have been seen, but it seems likely that it could cause problems on some architectures.

  • Fix compile failure with ICU 68 and later (Tom Lane) §

  • Avoid memcpy() with a NULL source pointer and zero count during partitioned index creation (Álvaro Herrera) §

    While such a call is not known to cause problems in itself, some compilers assume that the arguments of memcpy() are never NULL, which could result in incorrect optimization of nearby code.

  • Update time zone data files to tzdata release 2021a for DST law changes in Russia (Volgograd zone) and South Sudan, plus historical corrections for Australia, Bahamas, Belize, Bermuda, Ghana, Israel, Kenya, Nigeria, Palestine, Seychelles, and Vanuatu. (Tom Lane) §

    Notably, the Australia/Currie zone has been corrected to the point where it is identical to Australia/Hobart.

FAQ