E.20. Выпуск 11.3

Дата выпуска: 2019-05-09

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

E.20.1. Миграция на версию 11.3

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

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

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

  • Устранение возможности обойти политики защиты на уровне строк (RLS), используя оценки избирательности (Дин Рашид)

    При вычислении оценок избирательности планировщик применяет пользовательские операторы к значениям, находящимся в pg_statistic (то есть к самым частым значениям). Таким образом, негерметичный оператор может раскрыть некоторые данные в столбце таблицы, даже если пользователь не имеет доступа к этому столбцу. В CVE-2017-7484 мы добавили ограничения для предотвращения этой утечки, но не учли особенности защиты на уровне строк. Пользователь, которому в SQL дано право чтения столбца, но политикой RLS запрещён доступ к некоторым строкам, тем не менее мог получить некоторые сведения об их содержимом через негерметичный оператор. Это исправление усиливает ограничения, разрешая применение негерметичных операторов к статистическим данным только при отсутствии политики RLS. (CVE-2019-10130)

  • Предотвращение доступа к ранее освобождённой памяти при формировании сообщения об ошибке размещения кортежа в секции (Микаэль Пакье)

    Эта ошибка могла привести к отказу сервера; теоретически её можно было эксплуатировать для раскрытия содержимого памяти сервера. (CVE-2019-10129)

  • Предупреждение повреждения каталога при выполнении ALTER TABLE с секционированной таблицей, в которой секционирующий индекс оказывался подходящим для повторного использования (Амит Ланготе, Том Лейн)

    Это случается, например, когда при ALTER COLUMN TYPE оказывается, что физическая перезапись таблицы не требуется.

  • Предупреждение повреждения каталога при создании в транзакции, состоящей из одного оператора, и временной таблицы с ON COMMIT DROP, и столбца идентификации (Питер Эйзентраут)

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

  • Устранение сбоя в ALTER INDEX ... ATTACH PARTITION при наличии в секционированной таблице большего количества удалённых столбцов, чем в её секции (Альваро Эррера)

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

    Её следствием могли быть ошибки «index ... not found in partition» (индекс ... не найден в секции) при последующем выполнении операторов DDL, использующих этот секционированный индекс.

  • Предотвращение краха сервера при выполнении перепроверки EPQ для результирующего отношения запроса с секционированием (Амит Ланготе)

    Он происходил, когда использовался уровень изоляции READ COMMITTED и в другом сеансе параллельно изменялись какие-либо целевые строки.

  • Исправление перенаправления кортежей в многоуровневых секционированных таблицах, имеющих удалённые атрибуты (Амит Ланготе, Микаэль Пакье)

  • Устранение ошибки, возникавшей при выборе медленного пути начальной проверки ограничения внешнего ключа для секционированных таблиц (Хади Мошаеди, Том Лейн, Андрес Фройнд)

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

  • Исправление поведения UPDATE и DELETE при работе с деревом наследования или секционированной таблицей, допускающими исключение всех таблиц (Амит Ланготе, Том Лейн)

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

  • В запросах, обращающихся к секции напрямую при установленном параметре constraint_exclusion, для проверки ограничений-исключений теперь будут использоваться ограничения секции, а также все ограничения CHECK (Амит Ланготе, Том Лейн)

    Это изменение восстанавливает поведение, которое было в 10 версии.

  • Предупреждение краха сервера в случае ошибки при попытке продлить существование курсора после завершения транзакции (Том Лейн)

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

  • Устранение выдаваемых при наличии публикации FOR ALL TABLES некорректных ошибок при внесении изменений во временные и нежурналируемые таблицы (Питер Эйзентраут)

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

  • Исправление обработки явных элементов DEFAULT в команде INSERT ... VALUES с несколькими строками VALUES, целевым отношением для которой является обновляемое представление (Амит Ланготе, Дин Рашид)

    Когда в обновляемом представлении для столбца не задано значение по умолчанию, но оно задано в нижележащей таблице, команда INSERT ... VALUES с одной строкой вставит в столбец это значение по умолчанию. Однако при выполнении этой команды с несколькими строками вместо этого значения всегда вставлялся NULL. Теперь это исправлено, и такая команда выполняется так же, как и команда с одной строкой.

  • Исправление CREATE VIEW, позволяющее создавать представления с нулём столбцов (Ашутош Шарма)

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

  • Добавление поддержки CREATE TABLE IF NOT EXISTS ... AS EXECUTE ... (Андреас Карлссон)

    Сочетание предложений IF NOT EXISTS и EXECUTE должно поддерживаться, но в грамматике отсутствовало соответствующее правило.

  • Использование прав корректного пользователя при выполнении вложенных SELECT в выражениях политик защиты на уровне строк (Дин Рашид)

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

  • Теперь при значении xml параметра xmloption XML-документы считаются допустимыми значениями типа xml согласно требованию, появившемуся в стандарте SQL:2006 (Чепмен Флэк)

    Ранее PostgreSQL следовал определению стандарта SQL:2003, в котором это не допускалось. Но это создавало серьёзную проблему при выгрузке/восстановлении данных: ни одно из значений xmloption не позволяло принять все допустимые XML-данные. В связи с этим решено перейти к определению 2006.

    Также модифицирована утилита pg_dump, чтобы при восстановлении данных выполнялась команда SET xmloption = content. Это гарантирует, что выгрузка/восстановление сработает, даже если в данных преобладает вариант document.

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

    Теперь главный процесс (postmaster) будет более надёжно определять активные процессы, оставшиеся от предыдущего воплощения сервера, даже в случае удаления файла postmaster.pid.

  • Устранение возможности деления на ноль в логике очистки индекса-B-дерева (Пётр Стефаняк, Александр Коротков)

    Это могло приводить к ошибочным решениям относительно необходимости очистки индекса.

  • Исключение транзакций параллельных исполнителей из числа отдельных транзакций.

  • Устранение несовместимости записей GIN-индекса в WAL (Александр Коротков)

    Исправление, вошедшее в февральский корректирующий выпуск, не учитывало все тонкости обратной совместимости. Ведущий сервер этого выпуска формировал в WAL такие записи об удалении страниц GIN, которые не мог корректно воспринять ведомый более старой версии.

  • Устранение возможности сбоя при выполнении команды SHOW через соединение репликации (Микаэль Пакье)

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

  • Устранение утечки памяти при пересоздании в кеше структур, связанных с секционированными отношениями (Амит Ланготе, Том Лейн)

  • Допущение кодов ошибок EINVAL и ENOSYS в результатах функций fsync и sync_file_range там, где это приемлемо (Томас Манро, Джеймс Сьюэлл)

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

  • Вывод в представлении pg_stat_activity правильного имени отношения при вычислении сводных данных BRIN в процессе автоочистки (Альваро Эррера)

  • Предупреждение краха сервера при попытке планирования соединения с учётом секционирования, когда задействуется алгоритм GEQO (Том Лейн)

  • Устранение ошибок планировщика «failed to build any N-way joins» (не удалось построить никакие N-сторонние соединения) с подзапросами LATERAL снаружи полных внешних соединений (Том Лейн)

  • Исправлено некорректное планирование запросов, в которых возвращающая множество функция применяется к заведомо пустому отношению (Том Лейн, Жюльен Руо)

    В 10 версии следствием этого упущения могли быть только чуть менее эффективные планы, тогда как в 11 могли выдаваться ошибки «set-valued function called in context that cannot accept a set» (функция, возвращающая множество, вызвана в контексте, где ему нет места).

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

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

  • Исправление оценки параллельно-безопасности для запросов с группировкой (Эцуро Фудзита)

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

  • Исправление обработки «неключевых» столбцов индекса в логике планировщика, связанной с уникальными индексами (Том Лейн)

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

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

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

  • Ускорение планирования запросов со множеством условий равенства и множеством возможно связанных с ними ограничений внешнего ключа (Дэвид Роули)

  • Оптимизация неэффективных операций сложности O(N^2) при отмене транзакции, создавшей множество таблиц (Томаш Вондра)

  • Предупреждение краха сервера в особых случаях при выделении динамической общей памяти (Томас Манро, Роберт Хаас)

  • Устранение условий гонки при управлении динамической общей памятью (Томас Манро)

    В этих условиях могли возникать ошибки «dsa_area could not attach to segment» (не удалось подключить dsa_area к сегменту) или «cannot unpin a segment that is not pinned» (нельзя открепить сегмент, который не закреплён).

  • Устранение условий гонки, при которых сервер горячего резерва мог не отключиться, получив запрос на постепенное отключение (Том Лейн)

  • Устранение возможности краха при получении в параметрах pg_identify_object_as_address() неправильных данных (Альваро Эррера)

  • Ликвидация возможности ошибок «could not access status of transaction» (не удалось получить статус транзакции) в txid_status() (Томас Манро)

  • Устранение ошибки проверки подлинности при использовании аутентификации SCRAM со смешанными версиями библиотек OpenSSL (Микаэль Пакье, Питер Эйзентраут)

    Согласование механизма SASL осуществлялось некорректно, когда на стороне libpq использовалась библиотека OpenSSL 1.0.1 или старее, а на стороне сервера — OpenSSL 1.0.2 или новее. В результате выдавалась ошибка «channel binding not supported by this build» (связывание каналов не поддерживается этой сборкой).

  • Улучшение правил проверки паролей, зашифрованных алгоритмами SCRAM-SHA-256 и MD5 (Джонатан С. Кац)

    Строка пароля с определёнными начальными символами могла по ошибке приниматься за строку, закодированную в формате SCRAM-SHA-256 или MD5. Такой пароль можно было установить, но нельзя было использовать.

  • Исправление обработки значений lc_time, подразумевающих кодировку, отличающуюся от кодировки базы (Хуан Хосе Сантамария Флеча, Том Лейн)

    С локализованными названиями дней или месяцев, включающими не ASCII-символы, в таких локалях ранее выдавались неожиданные ошибки или некорректные строки.

  • Файл current_logfiles должен создаваться с теми же разрешениями, что и другие файлы в каталоге данных сервера (Харибабу Комми)

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

  • Исправление ошибочных проверок operator_precedence_warning с унарным оператором «минус» (Рикард Фалькеборн)

  • Недопущение NaN в качестве значения серверных параметров, принимающих числа с плавающей точкой (Том Лейн)

  • Реорганизация работы REINDEX для предотвращения сбоев проверочных утверждений при переиндексировании отдельных индексов pg_class (Андрес Фройнд, Том Лейн)

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

  • Добавление нужной функции проверки в результат, выдаваемый функцией SnapBuildInitialSnapshot() (Антонин Хоуска)

    Для кода ядра это не важно, но важно для некоторых расширений.

  • Устранение периодических ошибок «could not reattach to shared memory» (не удалось переподключиться к общей памяти) при запуске сеансов в Windows (Ной Миш)

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

  • Исправлена обработка ошибок при сканировании каталога в Windows (Константин Книжник)

    Такие ошибки, как отсутствие прав для чтения каталога, не обнаруживались и не выдавались корректно; вместо этого поведение кода было таким же, как и с пустым каталогом.

  • Исправление грамматических дефектов в ecpg (Том Лейн)

    Из-за пропущенной точки с запятой конструкция SET переменная = DEFAULT (но не SET переменная TO DEFAULT) в программах ecpg обрабатывалась некорректно, и в результате получался синтаксически некорректный код, не воспринимаемый сервером. Кроме того, в командах DROP TYPE и DROP DOMAIN, в которых перечислялось несколько имён типов, фактически обрабатывалось только первое имя.

  • Согласование синтаксиса CREATE TABLE AS в ecpg с принятым на стороне сервера (Дайсукэ Хигути)

  • Ликвидация возможности переполнения буфера при обработке в ecpg имён включаемых файлов (Лю Хуайлин, Фей Ву)

  • Устранение сбоя pg_rewind в случае ошибки при удалении некоторых промежуточных файлов в целевом каталоге данных (Микаэль Пакье)

  • Добавление в pg_verify_checksums проверки версии кластера в целевом каталоге (Микаэль Пакье)

  • Недопущение краха в contrib/postgres_fdw при наличии в запросе, использующем удалённую группировку или агрегирование, элемента списка SELECT, не связанного с вложенным запросом, внешней ссылкой или символом параметра (Том Лейн)

  • Расширение contrib/postgres_fdw теперь выдаёт ошибку, когда удалённая секция, выбранная для добавления строки, также является целевой для подплана UPDATE и должна модифицироваться позже той же командой (Амит Ланготе, Эцуро Фудзита)

    Ранее с такими запросами происходил крах сервера или получались некорректные результаты UPDATE. Полноценное выполнение этих запросов может быть реализовано в будущем.

  • Предупреждение в contrib/pg_prewarm бесконечного перезапуска фоновых рабочих процессов в случае неудачи при попытке выполнить разогрев (Митхун Сай)

  • Предупреждение краха в contrib/vacuumlo при ошибке в lo_unlink() (Том Лейн)

  • Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией 2019a (Том Лейн)

    При этом устранён небольшой дефект в zic, в результате которого выдавались данные о некорректном переходе в 2440 г. для часового пояса Africa/Casablanca, и добавлена поддержка нового параметра zic -r.

  • Обновление данных часовых поясов до версии tzdata 2019a, включающее изменение правил перехода на летнее время в Палестине и Метлакатле, а также корректировку исторических данных для Израиля.

    Часовой пояс Etc/UCT теперь является ссылкой на Etc/UTC (добавленной для обратной совместимости), а не отдельным поясом, генерирующем аббревиатуру UCT, которая теперь, как правило, просто опечатка. PostgreSQL по-прежнему принимает на вход такую аббревиатуру, но уже не выдаёт её.

E.20. Release 11.3

Release date: 2019-05-09

This release contains a variety of fixes from 11.2. For information about new features in major release 11, see Section E.23.

E.20.1. Migration to Version 11.3

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

However, if you are upgrading from a version earlier than 11.1, see Section E.22.

E.20.2. Changes

  • Prevent row-level security policies from being bypassed via selectivity estimators (Dean Rasheed)

    Some of the planner's selectivity estimators apply user-defined operators to values found in pg_statistic (e.g., most-common values). A leaky operator therefore can disclose some of the entries in a data column, even if the calling user lacks permission to read that column. In CVE-2017-7484 we added restrictions to forestall that, but we failed to consider the effects of row-level security. A user who has SQL permission to read a column, but who is forbidden to see certain rows due to RLS policy, might still learn something about those rows' contents via a leaky operator. This patch further tightens the rules, allowing leaky operators to be applied to statistics data only when there is no relevant RLS policy. (CVE-2019-10130)

  • Avoid access to already-freed memory during partition routing error reports (Michael Paquier)

    This mistake could lead to a crash, and in principle it might be possible to use it to disclose server memory contents. (CVE-2019-10129)

  • Avoid catalog corruption when an ALTER TABLE on a partitioned table finds that a partitioned index is reusable (Amit Langote, Tom Lane)

    This occurs, for example, when ALTER COLUMN TYPE finds that no physical table rewrite is required.

  • Avoid catalog corruption when a temporary table with ON COMMIT DROP and an identity column is created in a single-statement transaction (Peter Eisentraut)

    This hazard was overlooked because the case is not actually useful, since the temporary table would be dropped immediately after creation.

  • Fix failure in ALTER INDEX ... ATTACH PARTITION if the partitioned table contains more dropped columns than its partition does (Álvaro Herrera)

  • Fix failure to attach a partition's existing index to a newly-created partitioned index in some cases (Amit Langote, Álvaro Herrera)

    This would lead to errors such as index ... not found in partition in subsequent DDL that uses the partitioned index.

  • Avoid crash when an EPQ recheck is performed for a partitioned query result relation (Amit Langote)

    This occurs when using READ COMMITTED isolation level and another session has concurrently updated some of the target row(s).

  • Fix tuple routing in multi-level partitioned tables that have dropped attributes (Amit Langote, Michael Paquier)

  • Fix failure when the slow path of foreign key constraint initial validation is applied to partitioned tables (Hadi Moshayedi, Tom Lane, Andres Freund)

    This didn't manifest except in the uncommon cases where the fast path can't be used (such as permissions problems).

  • Fix behavior for an UPDATE or DELETE on an inheritance tree or partitioned table in which every table can be excluded (Amit Langote, Tom Lane)

    In such cases, the query did not report the correct set of output columns when a RETURNING clause was present, and if there were any statement-level triggers that should be fired, it didn't fire them.

  • When accessing a partition directly, and constraint_exclusion is set to on, use the partition's partition constraint as well as any CHECK constraints for exclusion checking (Amit Langote, Tom Lane)

    This change restores the behavior to what it was in v10.

  • Avoid server crash when an error occurs while trying to persist a cursor query across a transaction commit (Tom Lane)

    If a procedure attempts to commit while it has an open explicit or implicit cursor (for example, a PL/pgSQL FOR-loop query), the cursor must be executed to completion and its results saved before the transaction commit can be performed. An error occurring during such execution led to a crash.

  • Avoid throwing incorrect errors for updates of temporary tables and unlogged tables when a FOR ALL TABLES publication exists (Peter Eisentraut)

    Such tables should be ignored for publication purposes, but some parts of the code failed to do so.

  • Fix handling of explicit DEFAULT items in an INSERT ... VALUES command with multiple VALUES rows, if the target relation is an updatable view (Amit Langote, Dean Rasheed)

    When the updatable view has no default for the column but its underlying table has one, a single-row INSERT ... VALUES will use the underlying table's default. In the multi-row case, however, NULL was always used. Correct it to act like the single-row case.

  • Fix CREATE VIEW to allow zero-column views (Ashutosh Sharma)

    We should allow this for consistency with allowing zero-column tables. Since a table can be converted to a view, zero-column views could be created even with the restriction in place, leading to dump/reload failures.

  • Add missing support for CREATE TABLE IF NOT EXISTS ... AS EXECUTE ... (Andreas Karlsson)

    The combination of IF NOT EXISTS and EXECUTE should work, but the grammar omitted it.

  • Ensure that sub-SELECTs appearing in row-level-security policy expressions are executed with the correct user's permissions (Dean Rasheed)

    Previously, if the table having the RLS policy was accessed via a view, such checks might be executed as the user calling the view, not as the view owner as they should be.

  • Accept XML documents as valid values of type xml when xmloption is set to content, as required by SQL:2006 and later (Chapman Flack)

    Previously PostgreSQL followed the SQL:2003 definition, which doesn't allow this. But that creates a serious problem for dump/restore: there is no setting of xmloption that will accept all valid XML data. Hence, switch to the 2006 definition.

    pg_dump is also modified to emit SET xmloption = content while restoring data, ensuring that dump/restore works even if the prevailing setting is document.

  • Improve server's startup-time checks for whether a pre-existing shared memory segment is still in use (Noah Misch)

    The postmaster is now more likely to detect that there are still active processes from a previous postmaster incarnation, even if the postmaster.pid file has been removed.

  • Avoid possible division-by-zero in btree index vacuum logic (Piotr Stefaniak, Alexander Korotkov)

    This could lead to incorrect decisions about whether index cleanup is needed.

  • Avoid counting parallel workers' transactions as separate transactions (Haribabu Kommi)

  • Fix incompatibility of GIN-index WAL records (Alexander Korotkov)

    A fix applied in February's minor releases was not sufficiently careful about backwards compatibility, leading to problems if a standby server of that vintage reads GIN page-deletion WAL records generated by a primary server of a previous minor release.

  • Fix possible crash while executing a SHOW command in a replication connection (Michael Paquier)

  • Avoid server memory leak when fetching rows from a portal one at a time (Tom Lane)

  • Avoid memory leak when a partition's relation cache entry is rebuilt (Amit Langote, Tom Lane)

  • Tolerate EINVAL and ENOSYS error results, where appropriate, for fsync and sync_file_range calls (Thomas Munro, James Sewell)

    The previous change to panic on file synchronization failures turns out to have been excessively paranoid for certain cases where a failure is predictable and essentially means operation not supported.

  • Report correct relation name in autovacuum's pg_stat_activity display during BRIN summarize operations (Álvaro Herrera)

  • Avoid crash when trying to plan a partition-wise join when GEQO is active (Tom Lane)

  • Fix failed to build any N-way joins planner failures with lateral references leading out of FULL outer joins (Tom Lane)

  • Fix misplanning of queries in which a set-returning function is applied to a relation that is provably empty (Tom Lane, Julien Rouhaud)

    In v10, this oversight only led to slightly inefficient plans, but in v11 it could cause set-valued function called in context that cannot accept a set errors.

  • Check the appropriate user's permissions when enforcing rules about letting a leaky operator see pg_statistic data (Dean Rasheed)

    When an underlying table is being accessed via a view, consider the privileges of the view owner while deciding whether leaky operators may be applied to the table's statistics data, rather than the privileges of the user making the query. This makes the planner's rules about what data is visible match up with the executor's, avoiding unnecessarily-poor plans.

  • Fix planner's parallel-safety assessment for grouped queries (Etsuro Fujita)

    Previously, target-list evaluation work that could have been parallelized might not be.

  • Fix mishandling of included index columns in planner's unique-index logic (Tom Lane)

    This could result in failing to recognize that a unique index with included columns proves uniqueness of a query result, leading to a poor plan.

  • Fix incorrect strictness check for array coercion expressions (Tom Lane)

    This might allow, for example, incorrect inlining of a strict SQL function, leading to non-enforcement of the strictness condition.

  • Speed up planning when there are many equality conditions and many potentially-relevant foreign key constraints (David Rowley)

  • Avoid O(N^2) performance issue when rolling back a transaction that created many tables (Tomas Vondra)

  • Fix corner-case server crashes in dynamic shared memory allocation (Thomas Munro, Robert Haas)

  • Fix race conditions in management of dynamic shared memory (Thomas Munro)

    These could lead to dsa_area could not attach to segment or cannot unpin a segment that is not pinned errors.

  • Fix race condition in which a hot-standby postmaster could fail to shut down after receiving a smart-shutdown request (Tom Lane)

  • Fix possible crash when pg_identify_object_as_address() is given invalid input (Álvaro Herrera)

  • Fix possible could not access status of transaction failures in txid_status() (Thomas Munro)

  • Fix authentication failure when attempting to use SCRAM authentication with mixed OpenSSL library versions (Michael Paquier, Peter Eisentraut)

    If libpq is using OpenSSL 1.0.1 or older while the server is using OpenSSL 1.0.2 or newer, the negotiation of which SASL mechanism to use went wrong, leading to a confusing channel binding not supported by this build error message.

  • Tighten validation of encoded SCRAM-SHA-256 and MD5 passwords (Jonathan Katz)

    A password string that had the right initial characters could be mistaken for one that is correctly hashed into SCRAM-SHA-256 or MD5 format. The password would be accepted but would be unusable later.

  • Fix handling of lc_time settings that imply an encoding different from the database's encoding (Juan José Santamaría Flecha, Tom Lane)

    Localized month or day names that include non-ASCII characters previously caused unexpected errors or wrong output in such locales.

  • Create the current_logfiles file with the same permissions as other files in the server's data directory (Haribabu Kommi)

    Previously it used the permissions specified by log_file_mode, but that can cause problems for backup utilities.

  • Fix incorrect operator_precedence_warning checks involving unary minus operators (Rikard Falkeborn)

  • Disallow NaN as a value for floating-point server parameters (Tom Lane)

  • Rearrange REINDEX processing to avoid assertion failures when reindexing individual indexes of pg_class (Andres Freund, Tom Lane)

  • Fix planner assertion failure for parameterized dummy paths (Tom Lane)

  • Insert correct test function in the result of SnapBuildInitialSnapshot() (Antonin Houska)

    No core code cares about this, but some extensions do.

  • Fix intermittent could not reattach to shared memory session startup failures on Windows (Noah Misch)

    A previously unrecognized source of these failures is creation of thread stacks for a process's default thread pool. Arrange for such stacks to be allocated in a different memory region.

  • Fix error detection in directory scanning on Windows (Konstantin Knizhnik)

    Errors, such as lack of permissions to read the directory, were not detected or reported correctly; instead the code silently acted as though the directory were empty.

  • Fix grammar problems in ecpg (Tom Lane)

    A missing semicolon led to mistranslation of SET variable = DEFAULT (but not SET variable TO DEFAULT) in ecpg programs, producing syntactically invalid output that the server would reject. Additionally, in a DROP TYPE or DROP DOMAIN command that listed multiple type names, only the first type name was actually processed.

  • Sync ecpg's syntax for CREATE TABLE AS with the server's (Daisuke Higuchi)

  • Fix possible buffer overruns in ecpg's processing of include filenames (Liu Huailing, Fei Wu)

  • Fix pg_rewind failures due to failure to remove some transient files in the target data directory (Michael Paquier)

  • Make pg_verify_checksums verify that the data directory it's pointed at is of the right PostgreSQL version (Michael Paquier)

  • Avoid crash in contrib/postgres_fdw when a query using remote grouping or aggregation has a SELECT-list item that is an uncorrelated sub-select, outer reference, or parameter symbol (Tom Lane)

  • Change contrib/postgres_fdw to report an error when a remote partition chosen to insert a routed row into is also an UPDATE subplan target that will be updated later in the same command (Amit Langote, Etsuro Fujita)

    Previously, such situations led to server crashes or incorrect results of the UPDATE. Allowing such cases to work correctly is a matter for future work.

  • In contrib/pg_prewarm, avoid indefinitely respawning background worker processes if prewarming fails for some reason (Mithun Cy)

  • Avoid crash in contrib/vacuumlo if an lo_unlink() call failed (Tom Lane)

  • Sync our copy of the timezone library with IANA tzcode release 2019a (Tom Lane)

    This corrects a small bug in zic that caused it to output an incorrect year-2440 transition in the Africa/Casablanca zone, and adds support for zic's new -r option.

  • Update time zone data files to tzdata release 2019a for DST law changes in Palestine and Metlakatla, plus historical corrections for Israel.

    Etc/UCT is now a backward-compatibility link to Etc/UTC, instead of being a separate zone that generates the abbreviation UCT, which nowadays is typically a typo. PostgreSQL will still accept UCT as an input zone abbreviation, but it won't output it.

FAQ