E.52. Выпуск 12.2
Дата выпуска: 2020-02-13
В этот выпуск вошли различные исправления, внесённые после версии 12.1. За информацией о нововведениях версии 12 обратитесь к Разделу E.54.
E.52.1. Миграция на версию 12.2
Если используется версия 12.X, выгрузка/восстановление базы не требуется.
Однако если у вас имеются ограничения внешних ключей, ссылающиеся на секционированные таблицы, обратите внимание на два пункта, описывающие дефекты в реализации этих ограничений.
E.52.2. Изменения
Добавление отсутствовавших проверок прав для
ALTER ... DEPENDS ON EXTENSION(Альваро Эррера) §При обозначении объекта зависимым от расширения никакие проверки прав доступа не выполнялись. В результате этого упущения любой пользователь мог сделать так, чтобы процедуры, триггеры, матпредставления или индексы можно было удалить, имея право удалить какое-либо расширение. Теперь требуется, чтобы выполняющий эту команду пользователь был владельцем целевого объекта (это значит, что он сам может удалить этот объект). (CVE-2020-1720)
Исправление поведения
TRUNCATE ... CASCADE, чтобы эта операция опустошала все секции, на которые должна распространяться (Жеан-Гийом де Рорте) §Если секция секционированной таблицы опустошается в результате действия указания
CASCADE, и на эту секционированную таблицу по ключу ссылается другая, последняя также должна быть опустошена. Ранее при проверке не учитывалось, что ссылающаяся таблица тоже может быть секционированной, в результате чего в ней могли сохраниться строки, нарушающие ограничение внешнего ключа.Вследствие этого, если у вас есть ограничения внешнего ключа, связывающие секционированные таблицы, и вы производили операцию
TRUNCATEна уровне секции в целевой таблице, вам следует проверить, не нарушилось ли ограничение в результате опустошения. Проще всего это можно сделать, добавив ещё одно такое же ограничение внешнего ключа (и если это удастся сделать, затем удалить его или исходное). Если блокировка таблиц, которая потребуется при этом подходе, для вас неприемлема, вы можете найти нарушающие ограничение строки, сформулировав соответствующий запрос.Исправление копирования ограничений внешнего ключа во вложенные секции (Жеан-Гийом де Рорте) §
Ранее, когда секция добавлялась на уровне секционирования ниже первого, ограничения внешнего ключа, ссылающиеся на верхнюю секционированную таблицу, не копировались в новую секцию, что было чревато нарушениями ограничений в будущем. Проще всего теперь это можно исправить, отсоединив и заново присоединив добавленную секцию. Однако если исправлять надо большое количество секций, удобнее может быть ещё раз добавить ограничение внешнего ключа.
Предупреждение возможных сбоев при одновременных изменениях в секционированной таблице или иерархии наследования (Том Лейн) §
Обеспечение корректного переноса триггеров уровня строк во вложенные секции секционированных таблиц (Альваро Эррера) §
Ранее при создании или подключении секций пользовательские триггеры (но не триггеры, связанные с внешними ключами или отложенными уникальными ограничениями) могли теряться.
Исправление кода подписчика логической репликации, чтобы должны образом вызывались триггеры
UPDATE, связанные со столбцами (Питер Эйзентраут)Устранение сбоя при логическом декодировании в случаях, когда большую транзакцию приходится сохранять во множестве отдельных временных файлов (Амит Хандекар) § §
Устранение угрозы сбоев или повреждения данных при обработке операции изменения строки подписчиком логической репликации (Том Лейн, Томаш Вондра) §
Обнаруженный дефект мог проявляться, только если в таблице подписчика имелись столбцы, не копируемые с публикующего сервера, и использовались типы данных, передаваемые по ссылке.
Устранение в коде подписчика логической репликации сбоя, возникавшего после изменений структуры отношений, входящих в подписку (Жеан-Гийом де Рорте, Вигнеш Си) §
Ликвидация сбоя, возникавшего в подписчике логической репликации после отказа и перезапуска базы данных (Вигнеш Си) §
Обеспечение сохранности результата
pg_replication_slot_advance()со слотом физической репликации после перезагрузки сервера (Алексей Кондратов, Микаэль Пакье) § §Увеличение эффективности логической репликации с применением
REPLICA IDENTITY FULL(Константин Книжник) §Когда выполняется поиск существующего кортежа в процессе операции изменения или удаления, должен возвращаться первый подходящий кортеж, а не последний.
Исправление в коде базового копирования обработки идентификаторов БД с числовыми значениями, превышающими
INT32_MAX(Питер Эйзентраут) §Обеспечение отключения параллельных планов в нужное время (Кётаро Хоригути) §
Исправленное теперь упущение проявлялось в предупреждениях «temporary file leak» (утечка временных файлов), появляющихся при выполнении соединений по хешу в параллельном режиме.
Предотвращение преждевременного отключения узлов плана Gather или GatherMerge, находящихся под узлом Limit (Амит Капила) §
Тем самым устраняется возможность ошибки в случае, когда этот узел плана нужно сканировать многократно, например, если он оказался внутри вложенного цикла.
Увеличение эффективности параллельного выполнения соединений по хешу многоядерными процессорами (Ган Дэн, Томас Манро) §
Ликвидация сбоя при параллельном выполнении
CREATE INDEXв случае нехватки свободных слотов динамической общей памяти (Томас Манро) § §В этом случае должен происходить переход к непараллельному построению индекса.
Устранение утечки памяти, возникавшей при нехватке свободных слотов динамической общей памяти (Томас Манро) §
Аннулирование указания
CONCURRENTLYдля операций создания, удаления или перестроения индекса во временных таблицах (Микаэль Пакье, Хейкки Линнакангас, Андрес Фройнд) §Тем самым исключаются странные ошибки, возникавшие с временными таблицами, для которых назначалось действие
ON COMMIT. В любом случае, использоватьCONCURRENTLYдля временных таблиц (а это влечёт значительные издержки) не имеет смысла, так как никакие другие сеансы к таким таблицам обращаться не могут.Устранение ошибки, возникавшей при сбросе индексов по выражениям во временных таблицах с характеристикой
ON COMMIT DELETE ROWS(Том Лейн) §Ликвидация возможности сбоя при операциях с индексом BRIN, в котором используются типы данных
box,rangeиinet(Хейкки Линнакангас)Устранение сбоя при рекурсивном разделении страницы в процессе построения индекса GiST (Хейкки Линнакангас) § §
Исправление обработки удалённых страниц в индексах GIN (Александр Коротков) § § § §
В результате устранены риски возникновения взаимоблокировок, некорректного обновления состояния удалённой страницы, а также риск ошибки при обходе недавно удалённой страницы.
Предотвращение сбоя, возможного при выполнении вложенного
SELECT(узла SubPlan) в спискеVALUES, выдающем несколько строк (Том Лейн) §Исправление ошибки в
ALTER TABLE, возникавшей при обращении в выраженииGENERATEDк столбцу, который ранее добавила или модифицировала (поменяла его тип) эта же командаALTER(Том Лейн)Устранение сбоя при добавлении значений по умолчанию для «отсутствующих» атрибутов в ходе преобразования кортежей (Вик Фиринг, Эндрю Гирт) §
Ранее значения столбцов, добавленных командой
ALTER TABLE ADD COLUMNс константным значением по умолчанию, могли считываться как NULL.Устранение маловероятного риска аварии процесса, обрабатывающего контрольные точки, при попытки открыть ранее удалённые сегменты отношений (Томас Манро) § §
Устранения сбоя, возможного после ошибки в FileClose() (Ной Миш) §
Эту проблему можно было наблюдать, только если был включён параметр
data_sync_retry, так как в противном случае ошибка в FileClose() приводит к аварийной остановке сервера (PANIC).Исправление обработки нескольких триггеров
AFTER ROWв сторонней таблице (Эцуро Фудзита) §Предупреждение маловероятного риска сбоя при передаче переходного состояния агрегата по ссылке (Андрес Фройнд, Фёдор Сигаев) §
Улучшение вывода ошибок в функциях
to_date()иto_timestamp()(Том Лейн, Альваро Эррера) § §Сообщения о неправильном названии месяца или дня во входных строках могли обрезаться в середине многобайтного символа, в результате чего сообщение могло быть неприемлемым для выбранной кодировки, что вызывало ошибки при дальнейшей его обработке. Теперь эти сообщения будут обрезаться по следующему пробельному символу.
Устранение ошибочного сдвига на 1 результата функции
EXTRACT(ISOYEAR FROMс датами до нашей эры (Том Лейн)timestamp)Добавление в реализацию оператора
<>для типаcharпроверки на предмет определённости правила сортировки, чтобы вместо невразумительного сообщения «cache lookup failed for collation 0» (ошибка поиска правила сортировки 0 в кеше) выдавалось более понятное (Том Лейн) §Исключение смешения сканирования по TID с последовательным сканированием (Тацухито Касахара) § §
В результате допущенного при реорганизации кода упущения сканирование TID (выбор кортежей по CTID) считалось последовательным сканированием в статистических представлениях и как последовательное сканирование требовало предикатных блокировок для всей таблицы. Вследствие этих неоправданных в данном случае блокировок в сериализуемом режиме транзакций возникали избыточные ошибки сериализации.
Недопущение переполнения стека при обращении к представлениям
information_schemaв случае существования в системных каталогах представлений, которые ссылаются на себя же (Том Лейн) §Представление, ссылающееся на себя, работать не будет, так как при обращении к нему возникнет бесконечная рекурсия. Мы обрабатывали это корректно при попытке чтения из такого представления, но не учли, что зацикливание возможно и при проверке представлений на предмет поддержки автообновления.
Вывод NULL в качестве времени начала транзакции для процессов walsender в
pg_stat_activity(Альваро Эррера) § §Ранее в столбце
xact_startиногда могло отображаться время запуска процесса.Увеличение производительности соединений по хешу с очень большими внутренними отношениями (Томас Манро) §
Уменьшение количества циклических блокировок при большом числе активных процессов walsender (Пьер Дюкроке) §
Исправление расположения поля «Subplans Removed» (Подпланов удалено) в выводе
EXPLAIN(Даниэль Густафссон, Том Лейн) §В нетекстовых форматах это поле выдавалось внутри подгруппы «Plans», что приводило к нарушению синтаксиса. Теперь оно будет присоединяться к родительскому узлу плана (Append или MergeAppend), где и должно быть. В результате это поле переместится и в текстовом формате: если к тому же узлу плана присоединены ещё какие либо узлы InitPlan, поле «Subplans Removed» будет выводиться перед ними.
Исправление указания
SETTINGSкомандыEXPLAIN, чтобы в нетекстовом выводе присутствовал соответствующий элемент, даже если он пустой (Том Лейн) §В нетекстовых выходных форматах запрошенные поля должны выводиться всегда, даже если они имеют пустые или нулевые значения.
Предоставление планировщику права выполнять потенциально негерметичные проверки статистики дочерних таблиц, если пользователь имеет право читать соответствующий столбец таблицы и этот столбец непосредственно фигурирует в запросе (Дилип Кумар, Амит Ланготе) §
В результате была ликвидирована проблема с производительностью, возникшая после исправления уязвимости CVE-2017-7484. Тогда исправление состояло во введении запрета на применение негерметичных операторов к статистике столбцов, которые не разрешено читать пользователю. Однако достаточно часто пользователям даются разрешения только для родительской секционированной таблицы, а не для каждой её секции в отдельности. В таких случаях пользователь может прочитать столбец через родительскую таблицу, поэтому описанная защитная мера не имеет смысла; её результатом было лишь ухудшение оценок планировщика.
Устранение сбоев планировщика, происходивших при чрезмерно агрессивном сворачивании соединений до однострочных подзапросов (Том Лейн) §
Эти сбои приводили к ошибкам вида «failed to construct the join relation» (не удалось сконструировать отношение для соединения).
Устранение ошибок планировщика «no = operator for opfamily
NNNN» (нет оператора = для семейства операторовNNNN), возникавших при попытке сопоставитьLIKEили оператор регулярных выражений с двоично совместимым классом операторов индекса (Том Лейн) §Предотвращение сбоев в особых случаях и исправление неверных оценок при вычислении избирательности для операторов диапазона
<@и@>(Микаэль Пакье, Андрей Бородин, Том Лейн) §Исправление неточных оценок для предложений
ORв случае использования расширенной статистики по самым частым значениям (Томаш Вондра) § §Исключение из рассмотрения системных столбцов при обращении к расширенной статистике по самым частым значениям (Томаш Вондра) §
Тем самым предотвращаются ошибки планировщика «negative bitmapset member not allowed» (отрицательный элемент в битовой карте не допускается) при выполнении запросов с системными столбцами.
Исправление логики индексов BRIN для поддержки гипотетических индексов BRIN (Жюльен Руо, Хейкки Линнакангас) §
Ранее, если расширение, «помогающее выбрать индекс», подталкивало планировщик к плану с гипотетическим индексом BRIN, это приводило к ошибке, так как код оценки стоимости BRIN всегда пытался физически прочитать метастраницу индекса. Теперь добавлена проверка, является ли индекс гипотетическим; и в этом случае считается, что индекс имеет параметры по умолчанию.
Улучшено информирование об ошибках при попытках использовать автоматическое обновление представлений с правилами
INSTEADпо условию (Дин Рашид) §Это не поддерживалось и раньше, но ошибка проявлялась только во время выполнения запроса, так что её могли скрыть другие ошибки планировщика.
Недопущение включения составного типа в себя же косвенным образом через диапазонный тип (Том Лейн, Жюльен Руо) § §
Запрет на использование в ключе секционирования выражений, возвращающих псевдотипы, такие как
record(Том Лейн) §Корректировка сообщения об ошибке при попытке создать индекс по выражению с недопустимыми типами (Амит Ланготе) §
Исправление выгрузки представлений, содержащих только список
VALUES, после переименования выходного столбца представления (Том Лейн) §Рассмотрение типов данных и правил сортировки в конструкциях
XMLTABLEпри вычислении зависимостей представления или правила (Том Лейн) §Ранее было возможно нарушить работу представления с
XMLTABLE, удалив тип, который не фигурировал нигде больше в представлении. Данное исправление не корректирует зависимости ранее существовавших представлений, но повлияет на зависимости будущих.Предотвращение нежелательного понижения регистра символов и сокращения параметров аутентификации RADIUS (Маркос Давид) §
Ранее при разборе
pg_hba.confэти поля воспринимались как идентификаторы SQL, но это некорректно в общем случае.Исправление поведения
NOTIFY, чтобы поступающие уведомления передавались клиенту доReadyForQuery, а не после (Том Лейн)В результате гарантируется, что с libpq и другими клиентскими библиотеками, работающими по тому же алгоритму, клиент сможет получить все уведомления к моменту, когда транзакция будет считаться завершённой. Возможно, это не имеет большого значения для реальных приложений (так как им в любом случае придётся иметь дело с асинхронными уведомлениями), но это упрощает создание тестов с воспроизводимым поведением.
Устранение ошибок в процедуре шифрования GSSAPI, связанных с неблокирующим вводом/выводом (Том Лейн) §
Эти ошибки могли приводить к потере данных (что обычно влекло за собой нарушение протокола передачи) или к «динамическим блокировкам», когда передающий процесс переходил в состояние ожидания, не передав все данные. Более того, в libpq некорректно разделялись состояния шифрования для разных подключений, что могло приводить к сбоям в приложениях, использующих несколько защищённых подключений к базе данных.
Реализация в libpq возможности разобрать все связанные с GSS параметры подключения даже при компиляции кода без поддержки GSSAPI (Том Лейн)
Таким образом в этом аспекте устранено отличие от поддержки SSL, в отношении которой давно было принято решение, что имеет смысл всегда принимать все параметры, даже если они игнорируются или не могут работать в связи с отсутствием некоторой функциональности в конкретной сборке.
Исправление некорректной обработки кодов формата
%bи%Bв функции ecpgPGTYPEStimestamp_fmt_asc()(Томаш Вондра)В результате ошибки со сдвигом на один с этими кодами могло выводиться неправильное название месяца либо мог произойти сбой.
Устранение сбоя в случае нехватки памяти в ecpglib (Том Лейн) §
Исправление поведения pg_dump/pg_restore в параллельном режиме в случае ошибки создания рабочих процессов (Том Лейн) §
Предотвращение сбоя или блокировки при попытке завершить выполнение pg_dump/pg_restore сигналом (Том Лейн) §
Рассмотрение подтипов массивов и диапазонов в поиске типов данных, не поддерживающих обновление, в pg_upgrade (Том Лейн) §
Исправление проверки синтаксиса параметра createuser
--connection-limit(Альваро Эррера) §Реализация корректного поведения при изменении типа, используемого переменной составного типа PL/pgSQL, в большем числе случаев (Ашутош Шарма, Том Лейн) §
Ранее, если составной тип удалялся и пересоздавался, при обращении к переменной PL/pgSQL, имеющей такой тип, могли выдаваться ошибки «could not open relation with OID
NNNN» (не удалось открыть отношение с OIDNNNN).Устранение сбоя в
postgres_fdwпри попытке передать удалённому серверу команду видаUPDATE remote_tab SET (x,y) = (SELECT ...)(Том Лейн) §Ограничение в
contrib/dict_intминимально допустимого значенияmaxlenчислом 1 (Томаш Вондра) §Тем самым предотвращаются сбои с бессмысленными значениями данного параметра.
Введение в реализованной в
contrib/tablefuncфункцииcrosstab()запрета на значения NULL в категориях (Джо Конвей) §Такой вариант использования никогда не давал разумных результатов, а на некоторых платформах мог приводить к сбою.
Исправление в configure проверки функции OpenSSL
SSL_clear_options(), чтобы она работала и с версиями OpenSSL ниже 1.1.0 (Микаэль Пакье, Даниэль Густафссон) §Устранённая теперь проблема мешала установить желаемые параметры сжатия SSL при сборке PostgreSQL со старой версией OpenSSL.
Добавление пометки
PGDLLIMPORTдля некоторых переменных GUC, связанных с тайм-аутами и статистикой, чтобы их могли использовать расширения в Windows (Паскаль Легран) §Это изменение затронуло переменные
idle_in_transaction_session_timeout,lock_timeout,statement_timeout,track_activities,track_countsиtrack_functions.Устранение утечки памяти в коде проверки целостности контекстов памяти «slab» (Томаш Вондра) §
Это не является проблемой в производственных сборках, так как в них проверка контекстов памяти обычно отключена; однако утечка могла быть весьма заметной в отладочных сборках.
Устранение дублирования статистических записей, выдаваемых механизмом сбора статистики LWLock (Фудзии Масао) §
Код статистики LWLock (он не собирается по умолчанию, но может быть собран при компиляции с ключом
-DLWLOCK_STATS) мог в результате некорректного формирования ключа хеш-таблицы выдавать несколько записей для одного сочетания блокировки и обслуживающего процесса.Устранение условий гонки, при которых могла задерживаться доставка межпроцессорных сигналов в Windows (Амит Капила) §
В частности, это проявлялось в странных нарушениях синхронизации сообщений
NOTIFY.Исправление обработки результата функции Windows
ReadFile()в особых случаях (Томас Манро, Хуан Хосе Сантамария Флеча) §Насколько известно, устранённый дефект вызывал только появление лишних сообщений в журнале, на выполнение запросов он не влиял.
Добавление нескольких повторений для операции открытия файла в случае получения ошибки
ERROR_ACCESS_DENIEDв Windows (Александр Лахин, Том Лейн) § §Это помогает справиться с ситуацией, когда попытка открыть файл не удаётся из-за того, что файл помечен для удаления, но ещё не удалён окончательно. Например, утилита pg_ctl часто сталкивалась с такой ошибкой, пытаясь определить, остановился ли главный процесс (postmaster).
Реализация в Windows обхода ошибки совместного доступа к файлу журнала postgres, возникавшей, когда pg_ctl запускала postmaster сразу после его остановки, например, выполняя команду
pg_ctl restart(Александр Лахин) §
E.52. Release 12.2
Release date: 2020-02-13
This release contains a variety of fixes from 12.1. For information about new features in major release 12, see Section E.54.
E.52.1. Migration to Version 12.2
A dump/restore is not required for those running 12.X.
However, if you have any foreign key constraints referencing partitioned tables, see the two entries below about bugs in that feature.
E.52.2. Changes
Add missing permissions checks for
ALTER ... DEPENDS ON EXTENSION(Álvaro Herrera) §Marking an object as dependent on an extension did not have any privilege check whatsoever. This oversight allowed any user to mark routines, triggers, materialized views, or indexes as droppable by anyone able to drop an extension. Require that the calling user own the specified object (and hence have privilege to drop it). (CVE-2020-1720)
Fix
TRUNCATE ... CASCADEto ensure all relevant partitions are truncated (Jehan-Guillaume de Rorthais) §If a partition of a partitioned table is truncated with the
CASCADEoption, and the partitioned table has a foreign-key reference from another table, that table must also be truncated. The need to check this was missed if the referencing table was itself partitioned, possibly allowing rows to survive that violate the foreign-key constraint.Hence, if you have foreign key constraints between partitioned tables, and you have done any partition-level
TRUNCATEon the referenced table, you should check to see if any foreign key violations exist. The simplest way is to add a new instance of the foreign key constraint (and, once that succeeds, drop it or the original constraint). That may be prohibitive from a locking standpoint, however, in which case you might prefer to manually query for unmatched rows.Fix failure to attach foreign key constraints to sub-partitions (Jehan-Guillaume de Rorthais) §
When adding a partition to a level below the first level of a multi-level partitioned table, foreign key constraints referencing the top partitioned table were not cloned to the new partition, leading to possible constraint violations later. Detaching and re-attaching the new partition is the cheapest way to fix this. However, if there are many partitions to be fixed, adding a new instance of the foreign key constraint might be preferable.
Fix possible crash during concurrent update on a partitioned table or inheritance tree (Tom Lane) §
Ensure that row triggers on partitioned tables are correctly cloned to sub-partitions when appropriate (Álvaro Herrera) §
User-defined triggers (but not triggers for foreign key or deferred unique constraints) might be missed when creating or attaching a partition.
Fix logical replication subscriber code to execute per-column
UPDATEtriggers when appropriate (Peter Eisentraut) §Avoid failure in logical decoding when a large transaction must be spilled into many separate temporary files (Amit Khandekar) § §
Fix possible crash or data corruption when a logical replication subscriber processes a row update (Tom Lane, Tomas Vondra) §
This bug caused visible problems only if the subscriber's table contained columns that were not being copied from the publisher and had pass-by-reference data types.
Fix crash in logical replication subscriber after DDL changes on a subscribed relation (Jehan-Guillaume de Rorthais, Vignesh C) §
Fix failure in logical replication publisher after a database crash and restart (Vignesh C) §
Ensure that the effect of
pg_replication_slot_advance()on a physical replication slot will persist across restarts (Alexey Kondratov, Michael Paquier) § §Improve efficiency of logical replication with
REPLICA IDENTITY FULL(Konstantin Knizhnik) §When searching for an existing tuple during an update or delete operation, return the first matching tuple not the last one.
Fix base backup to handle database OIDs larger than
INT32_MAX(Peter Eisentraut) §Ensure parallel plans are always shut down at the correct time (Kyotaro Horiguchi) §
This oversight is known to result in “temporary file leak” warnings from multi-batch parallel hash joins.
Prevent premature shutdown of a Gather or GatherMerge plan node that is underneath a Limit node (Amit Kapila) §
This avoids failure if such a plan node needs to be scanned more than once, as for instance if it is on the inside of a nestloop.
Improve efficiency of parallel hash join on CPUs with many cores (Gang Deng, Thomas Munro) §
Avoid crash in parallel
CREATE INDEXwhen there are no free dynamic shared memory slots (Thomas Munro) § §Fall back to a non-parallel index build, instead.
Avoid memory leak when there are no free dynamic shared memory slots (Thomas Munro) §
Ignore the
CONCURRENTLYoption when performing an index creation, drop, or rebuild on a temporary table (Michael Paquier, Heikki Linnakangas, Andres Freund) §This avoids strange failures if the temporary table has an
ON COMMITaction. There is no benefit in usingCONCURRENTLYfor a temporary table anyway, since other sessions cannot access the table, making the extra processing pointless.Fix possible failure when resetting expression indexes on temporary tables that are marked
ON COMMIT DELETE ROWS(Tom Lane) §Fix possible crash in BRIN index operations with
box,rangeandinetdata types (Heikki Linnakangas) §Fix crash during recursive page split in GiST index build (Heikki Linnakangas) § §
Fix handling of deleted pages in GIN indexes (Alexander Korotkov) § § § §
Avoid possible deadlocks, incorrect updates of a deleted page's state, and failure to traverse through a recently-deleted page.
Fix possible crash with a SubPlan (sub-
SELECT) within a multi-rowVALUESlist (Tom Lane) §Fix failure in
ALTER TABLEwhen a column referenced in aGENERATEDexpression has been added or changed in type earlier in the sameALTERcommand (Tom Lane) §Fix failure to insert default values for “missing” attributes during tuple conversion (Vik Fearing, Andrew Gierth) §
This could result in values incorrectly reading as NULL, when they come from columns that had been added by
ALTER TABLE ADD COLUMNwith a constant default.Fix unlikely panic in the checkpointer process, caused by opening relation segments that might already have been removed (Thomas Munro) § §
Fix crash after FileClose() failure (Noah Misch) §
This issue could only be observed with
data_sync_retryenabled, since otherwise FileClose() failure would be reported as a PANIC.Fix handling of multiple
AFTER ROWtriggers on a foreign table (Etsuro Fujita) §Fix unlikely crash with pass-by-reference aggregate transition states (Andres Freund, Teodor Sigaev) §
Improve error reporting in
to_date()andto_timestamp()(Tom Lane, Álvaro Herrera) § §Reports about incorrect month or day names in input strings could truncate the input in the middle of a multi-byte character, leading to an improperly encoded error message that could cause follow-on failures. Truncate at the next whitespace instead.
Fix off-by-one result for
EXTRACT(ISOYEAR FROMfor BC dates (Tom Lane) §timestamp)Ensure that the
<>operator for typecharreports indeterminate-collation errors as such, rather than as “cache lookup failed for collation 0” (Tom Lane) §Avoid treating TID scans as sequential scans (Tatsuhito Kasahara) § §
A refactoring oversight caused TID scans (selection by CTID) to be counted as sequential scans in the statistics views, and to take whole-table predicate locks as sequential scans do. The latter behavior could cause unnecessary serialization errors in serializable transaction mode.
Avoid stack overflow in
information_schemaviews when a self-referential view exists in the system catalogs (Tom Lane) §A self-referential view can't work; it will always result in infinite recursion. We handled that situation correctly when trying to execute the view, but not when inquiring whether it is automatically updatable.
Ensure that walsender processes always show NULL for transaction start time in
pg_stat_activity(Álvaro Herrera) § §Previously, the
xact_startcolumn would sometimes show the process start time.Improve performance of hash joins with very large inner relations (Thomas Munro) §
Reduce spinlock contention when there are many active walsender processes (Pierre Ducroquet) §
Fix placement of “Subplans Removed” field in
EXPLAINoutput (Daniel Gustafsson, Tom Lane) §In non-text output formats, this field was emitted inside the “Plans” sub-group, resulting in syntactically invalid output. Attach it to the parent Append or MergeAppend plan node as intended. This causes the field to change position in text output format too: if there are any InitPlans attached to the same plan node, “Subplans Removed” will now appear before those.
Fix
EXPLAIN'sSETTINGSoption to print as empty in non-text output formats (Tom Lane) §In the non-text output formats, fields are supposed to appear when requested, even if they have empty or zero values.
Allow the planner to apply potentially-leaky tests to child-table statistics, if the user can read the corresponding column of the table that's actually named in the query (Dilip Kumar, Amit Langote) §
This change fixes a performance problem for partitioned tables that was created by the fix for CVE-2017-7484. That security fix disallowed applying leaky operators to statistics for columns that the current user doesn't have permission to read directly. However, it's somewhat common to grant permissions only on the parent partitioned table and not bother to do so on individual partitions. In such cases, the user can read the column via the parent, so there's no point in this security restriction; it only results in poorer planner estimates than necessary.
Fix planner errors induced by overly-aggressive collapsing of joins to single-row subqueries (Tom Lane) §
This mistake led to errors such as “failed to construct the join relation”.
Fix “no = operator for opfamily
NNNN” planner error when trying to match aLIKEor regex pattern-match operator to a binary-compatible index opclass (Tom Lane) §Fix edge-case crashes and misestimations in selectivity calculations for the
<@and@>range operators (Michael Paquier, Andrey Borodin, Tom Lane) §Fix incorrect estimation for
ORclauses when using most-common-value extended statistics (Tomas Vondra) § §Ignore system columns when applying most-common-value extended statistics (Tomas Vondra) §
This prevents “negative bitmapset member not allowed” planner errors for affected queries.
Fix BRIN index logic to support hypothetical BRIN indexes (Julien Rouhaud, Heikki Linnakangas) §
Previously, if an “index adviser” extension tried to get the planner to produce a plan involving a hypothetical BRIN index, that would fail, because the BRIN cost estimation code would always try to physically access the index's metapage. Now it checks to see if the index is only hypothetical, and uses default assumptions about the index parameters if so.
Improve error reporting for attempts to use automatic updating of views with conditional
INSTEADrules (Dean Rasheed) §This has never been supported, but previously the error was thrown only at execution time, so that it could be masked by planner errors.
Prevent a composite type from being included in itself indirectly via a range type (Tom Lane, Julien Rouhaud) § §
Disallow partition key expressions that return pseudo-types, such as
record(Tom Lane) §Fix error reporting for index expressions of prohibited types (Amit Langote) §
Fix dumping of views that contain only a
VALUESlist to handle cases where a view output column has been renamed (Tom Lane) §Ensure that data types and collations used in
XMLTABLEconstructs are accounted for when computing dependencies of a view or rule (Tom Lane) §Previously it was possible to break a view using
XMLTABLEby dropping a type, if the type was not otherwise referenced in the view. This fix does not correct the dependencies already recorded for existing views, only for newly-created ones.Prevent unwanted downcasing and truncation of RADIUS authentication parameters (Marcos David) §
The
pg_hba.confparser mistakenly treated these fields as SQL identifiers, which in general they aren't.Transmit incoming
NOTIFYmessages to the client before sendingReadyForQuery, rather than after (Tom Lane) §This change ensures that, with libpq and other client libraries that act similarly to it, any notifications received during a transaction will be available by the time the client thinks the transaction is complete. This probably makes no difference in practical applications (which would need to cope with asynchronous notifications in any case); but it makes it easier to build test cases with reproducible behavior.
Fix bugs in handling of non-blocking I/O when using GSSAPI encryption (Tom Lane) §
These errors could result in dropping data (usually leading to subsequent wire-protocol-violation errors) or in a “livelock” situation where a sending process goes to sleep although not all its data has been sent. Moreover, libpq failed to keep separate encryption state for each connection, creating the possibility for failures in applications using multiple encrypted database connections.
Allow libpq to parse all GSS-related connection parameters even when the GSSAPI code hasn't been compiled in (Tom Lane) §
This makes the behavior similar to our SSL support, where it was long ago deemed to be a good idea to always accept all the related parameters, even if some are ignored or restricted due to lack of the feature in a particular build.
Fix incorrect handling of
%band%Bformat codes in ecpg'sPGTYPEStimestamp_fmt_asc()function (Tomas Vondra) §Due to an off-by-one error, these codes would print the wrong month name, or possibly crash.
Avoid crash after an out-of-memory failure in ecpglib (Tom Lane) §
Fix parallel pg_dump/pg_restore to more gracefully handle failure to create worker processes (Tom Lane) §
Prevent possible crash or lockup when attempting to terminate a parallel pg_dump/pg_restore run via a signal (Tom Lane) §
In pg_upgrade, look inside arrays and ranges while searching for non-upgradable data types in tables (Tom Lane) §
Apply more thorough syntax checking to createuser's
--connection-limitoption (Álvaro Herrera) §Cope with changes of the specific type referenced by a PL/pgSQL composite-type variable in more cases (Ashutosh Sharma, Tom Lane) §
Dropping and re-creating the composite type referenced by a PL/pgSQL variable could lead to “could not open relation with OID
NNNN” errors.Avoid crash in
postgres_fdwwhen trying to send a command likeUPDATE remote_tab SET (x,y) = (SELECT ...)to the remote server (Tom Lane) §In
contrib/dict_int, rejectmaxlensettings less than one (Tomas Vondra) §This prevents a possible crash with silly settings for that parameter.
Disallow NULL category values in
contrib/tablefunc'scrosstab()function (Joe Conway) §This case never worked usefully, and it would crash on some platforms.
Fix configure's probe for OpenSSL's
SSL_clear_options()function so that it works with OpenSSL versions before 1.1.0 (Michael Paquier, Daniel Gustafsson) §This problem could lead to failure to set the SSL compression option as desired, when PostgreSQL is built against an old version of OpenSSL.
Mark some timeout and statistics-tracking GUC variables as
PGDLLIMPORT, to allow extensions to access them on Windows (Pascal Legrand) §This applies to
idle_in_transaction_session_timeout,lock_timeout,statement_timeout,track_activities,track_counts, andtrack_functions.Avoid memory leak in sanity checks for “slab” memory contexts (Tomas Vondra) §
This isn't an issue for production builds, since they wouldn't ordinarily have memory context checking enabled; but the leak could be quite severe in a debug build.
Fix multiple statistics entries reported by the LWLock statistics mechanism (Fujii Masao) §
The LWLock statistics code (which is not built by default; it requires compiling with
-DLWLOCK_STATS) could report multiple entries for the same LWLock and backend process, as a result of faulty hashtable key creation.Fix race condition that led to delayed delivery of interprocess signals on Windows (Amit Kapila) §
This caused visible timing oddities in
NOTIFY, and perhaps other misbehavior.Fix handling of a corner-case error result from Windows'
ReadFile()function (Thomas Munro, Juan José Santamaría Flecha) §So far as is known, this oversight just resulted in noisy log messages, not any actual query misbehavior.
On Windows, retry a few times after an
ERROR_ACCESS_DENIEDfile access failure (Alexander Lakhin, Tom Lane) § §This helps cope with cases where a file open attempt fails because the targeted file is flagged for deletion but not yet actually gone. pg_ctl, for example, frequently failed with such an error when probing to see if the postmaster had shut down yet.
On Windows, work around sharing violations for the postmaster's log file when pg_ctl is used to start the postmaster very shortly after it's been stopped, for example by
pg_ctl restart(Alexander Lakhin) §