E.49. Выпуск 11.6
Дата выпуска: 2019-11-14
В этот выпуск вошли различные исправления, внесённые после версии 11.5. За информацией о нововведениях версии 11 обратитесь к Разделу E.55.
E.49.1. Миграция на версию 11.6
Если используется версия 11.X, выгрузка/восстановление базы не требуется.
Однако если вы используете расширение contrib/intarray с индексом GiST и применяете оператор <@ для поиска по индексу, примите к сведению соответствующее замечание в списке изменений.
Если вы обновляете сервер с более ранней версии, чем 11.1, см. также Раздел E.54.
E.49.2. Изменения
Устранение сбоя команды
ALTER TABLE SETс нестандартным параметром отношения (Микаэль Пакье)Недопущение изменения типа столбца, унаследованного от нескольких таблиц, в случае, когда изменяются не все родительские таблицы (Том Лейн)
Ранее это допускалось, что приводило к сбоям в запросах к потерявшим согласованность родительским таблицам.
Устранение сбоя в случае повторного указания целевой таблицы в команде
ANALYZEвнутри блока транзакции (Том Лейн)Исключение попыток заморозить в ходе
VACUUMидентификатор старой мультитранзакции, включающей всё ещё выполняющуюся транзакцию (Натан Боссарт, Джереми Шнайдер)В подобной ситуации выполнение
VACUUMпрерывалась ошибкой, пока не завершалась старая транзакция.Устранение ошибки при выполнении
SET CONSTRAINTS ... DEFERREDс секционированными таблицами, сопровождаемой некорректным сообщением об отсутствии триггеров (Альваро Эррера)Ликвидация ошибки, возникавшей при создании индексов секции в случае наличия в родительской таблице удалённых столбцов (Микаэль Пакье)
Исправление в планировщике проверки, возможна ли смена регистра для символа, выполняемой в
ILIKEпри использовании правил сортировки ICU (Том Лейн)В результате ошибки планировщик считал фиксированным префиксом слишком большую часть шаблона поиска
ILIKE, вследствие чего при поиске по индексу могли не находиться записи, удовлетворяющие шаблону.Реализация должной обработки выражений смещения в предложениях
WINDOWпри манипуляциях с выражениями запросов (Эндрю Гирт)В результате устранённого теперь упущения использование нетривиальных выражений в качестве смещений могло вызывать разнообразные ошибки. Например, в случае встраивания функции обращение к её параметрам в таком выражении могло производиться некорректно.
Исправление обработки переменных-кортежей в выражениях
WITH CHECK OPTIONи выражениях политик защиты на уровне строк (Андрес Фройнд)Ранее с подобными конструкциями могли возникать ошибки с некорректными сообщениями о несовпадении типа табличной строки.
Устранение сбоя главного процесса при попытке выделить для параллельного выполнения запроса фоновый исполнитель в момент отсутствия свободных слотов в массиве дочерних процессов (Том Лейн)
Предотвращение двойного освобождения памяти в случае, когда триггер
BEFORE UPDATEвозвращает старый кортеж «как есть» и такой триггер не последний (Томас Манро)Устранение сбоя при проверке условия
или при подобной операции, где в качестве массива выступает константа NULL (Том Лейн)x= ANY (массив)Устранение ошибки «unexpected relkind» (неожиданный вид отношения) при попытке обращения запроса к таблице TOAST (Джон Сюй, Микаэль Пакье, Том Лейн)
В такой ситуации должно выдаваться сообщение об отсутствии доступа, но вследствие реорганизации кода этот случай обрабатывался некорректно.
Передача ожидаемого контекста ошибки в случае возникновения ошибки при изменении параметров GUC в ходе запуска параллельного исполнителя (Томас Манро)
Обеспечение установления в сериализуемом режиме предикатных блокировок на уровне строки в корректной версии строки (Томас Манро, Хейкки Линнакангас)
При изменении видимой строки по методу HOT блокировка могла устанавливаться в предыдущей и ставшей неактуальной версии, что приводило к нарушению гарантии сериализации.
Осуществление вызова
fsync()только для тех файлов, которые открываются для чтения/записи (Андрес Фройнд, Микаэль Пакье)В некоторых местах кода были попытки вызывать эту функцию и для файлов, открываемых только для чтения, но на некоторых платформах при этом возникают ошибки вида «bad file descriptor» (плохой дескриптор файла).
Возможность успешного преобразования кодировки для более длинных строк, чем раньше (Альваро Эррера, Том Лейн)
Ранее существовало жёсткое ограничение размера входной строки в 0.25 ГБ, но сейчас преобразование будет успешным, если результат преобразования умещается в 1 ГБ.
Исключение ненужного поиска в каталоге при зачистке страницы кучи (Томас Манро)
Теперь в этом месте нет необходимости в проверке наличия нежурналируемых индексов, которая вызывала снижение производительности при определённой нагрузке. К тому же эта проверка теоретически могла быть причиной взаимоблокировок.
Выбор по возможности более компактных хранилищ кортежей для оконных функций (Эндрю Гирт)
В некоторых случаях в хранилище кортежей могли попадать все столбцы исходных таблиц, а не только те, что требуются для запроса.
Устранение запрета на выполнение JIT-компиляции операций сравнения для группировки хеш-таблиц, приводившего к потере производительности (Андрес Фройнд)
Возможность освобождения памяти функцией
repalloc()при значительном уменьшении размера большого блока (Том Лейн)Обеспечение удаления временных файлов WAL и истории по завершении восстановления архива (Савада Масахико)
Устранение ошибки, не позволяющей восстановить архив при включении параметра
recovery_min_apply_delay(Масао Фудзии)Параметр
recovery_min_apply_delayв такой конфигурации обычно не используется, тем не менее он должен работать.Устранение ошибки при логической репликации, когда публикующий сервер и подписчик имеют разные представления о столбцах идентификации реплики (Жеан-Гийом де Рорте, Питер Эйзентраут)
Если на подписчике частью ключа идентификации реплики объявлялся столбец, вовсе отсутствующий на публикующем сервере, при репликации выдавались ошибки «negative bitmapset member not allowed» (отрицательный элемент в битовой карте не допускается).
Недопущение нежелательной задержки при отключении процесса walsender, участвующего в логической репликации (Крейг Рингер, Альваро Эррера)
Исправление обработки тайм-аута в процессах walreceiver, участвующих в логической репликации (Жюльен Руо)
Ошибочная логика препятствовала использованию
wal_receiver_timeoutпри логической репликации.Исправление передачи меток времени в сообщениях репликации для логического декодирования (Джефф Джейнс)
В частности, в результате допущенной ошибки поле
pg_stat_subscription.last_msg_send_timeобычно содержало NULL.Исправление обработки подтранзакций при восстановлении снимка в процессе логического декодирования (Масахико Савада)
Ликвидированная теперь ошибка проявлялась в сбоях проверочных утверждений; в обычных сборках её последствия неизвестны.
Устранение условий гонки при завершении обслуживающего процесса, который до этого оказывался в состоянии ожидания синхронной репликации (Донмин Лю)
Исправление поведения
ALTER SYSTEMпри дублировании переменных вpostgresql.auto.conf(Иэн Барвик)Сама команда
ALTER SYSTEMне может привести файлpostgresql.auto.confв такое состояние, но это могут сделать внешние программы. Теперь дублирующиеся назначения переменных будут удаляться, а новое значение (если оно назначается) будет добавляться в конце файла.Недопущение в конфигурационных файлах указаний включения каталогов с пустыми именами и более явное информирование о рекурсивном включении файлов (Иэн Барвик, Том Лейн)
Ликвидация сообщений о брошенных соединениях при использовании аутентификации PAM (Том Лейн)
Клиенты на базе libpq обычно делают две попытки подключения, когда требуется пароль, так как они спрашивают пароль только в случае неудачи при первой попытке. Поэтому на стороне сервера приняты меры, чтобы в журнал не добавлялись бесполезные сообщения о том, что клиент закрыл подключение при запросе пароля. Однако в коде проверки PAM об этом забыли, и сервер выдавал сообщения о фантомных ошибках при проверке подлинности.
Исправление разбора входной строки
time with time zone, содержащей неполную дату (Александр Лахин)В случае указания часового пояса, смещение которого от UTC меняется во времени, также должна указываться дата, чтобы это смещение можно было определить. В некоторых случаях, в зависимости от используемого синтаксиса, эта проверка могла не работать, и выдавались невразумительные результаты.
Исправление некорректного поведения
bitshiftright()(Том Лейн)Оператор сдвига битовой строки вправо не заполнял корректно нулями биты в последнем байте результата при длине битовой строки не кратной 8. Хотя эти биты не видны для большинства операций, их содержимое могло влиять на результат сравнения, так как при сравнении битовых строк дополнительные биты специально не обрабатываются (предполагается, что они всегда нулевые).
Если в ваших таблицах могли сохраниться некорректные данные в результате выполнения
bitshiftright(), их можно исправить примерно так:UPDATE mytab SET bitcol = ~(~bitcol) WHERE bitcol != ~(~bitcol);
Восстановление возможности получения информации о типах из предложения
ASвjson[b]_populate_record()иjson[b]_populate_recordset()(Том Лейн)Если в качестве аргумента функции передаётся NULL и объявление составного типа отсутствует, информация о типах может извлекаться из предложения
AS. Этот вариант записи не является рекомендуемым, но раньше он работал, и теперь будет работать снова.Устранение сбоя при выборе узла пространства имён в
XMLTABLE(Чепмен Флэк)Исправление проверки целочисленного переполнения при умножении интервалов в особых случаях (Юя Ватари)
Ликвидация утечек памяти в функциях
lower(),upper()иinitcap()при использовании правил сортировки ICU (Константин Книжник)Устранение сбоев при обработке некорректных данных аффиксов в словарях текстового поиска
ispell(Артур Закиров)Исправление некорректной логики сжатия для списков идентификаторов GIN (Хейкки Линнакангас)
Для одного элемента в списке идентификаторов может требоваться 7 байт, если расстояние между соседними идентификаторами проиндексированных кортежей превышает 16 ТБ. В одном месте логика обработки этого списка не учитывала это, и значение могло записываться в 6-байтный буфер. В принципе это могло приводить и к выходу за границы стека, но на большинстве архитектур следующий байт оказывался в блоке выравнивания, так что это не причиняло вреда. В любом случае вызвать эту ошибку было очень сложно.
Исправление обработки значений infinity, NaN и NULL в KNN-GiST (Александр Коротков)
Порядок результатов запроса мог быть некорректным (отличаться от порядка простой сортировки результатов), если для отличных от NULL значений столбцов получались расстояния infinity или NaN.
Исправление поиска NULL в KNN-SP-GiST (Никита Глухов)
Поддержка ещё одного варианта названия локали норвежского букмола «Norwegian (Bokmål)» в Windows (Том Лейн)
Устранение ошибки компиляции клиентского кода ECPG, включающего заголовочный файл
ecpglib.h, при определённом макросеENABLE_NLS(Том Лейн)Этот дефект стал следствием некорректного размещения объявления функции
ecpg_gettext()— она не должна быть видна в клиентском коде.Обновление внутренней информации о сервере в psql после неожиданной потери соединения и успешного переподключения (Петер Биллен, Том Лейн)
Обычно в этом нет необходимости, так как информация о сервере будет той же, но в особых случаях подключение может устанавливаться к одному из нескольких серверов, и тогда это имеет смысл. В результате этого изменения psql теперь повторно выдаёт интерактивные сообщения, которые он раньше выдавал только при запуске, например, сообщает об использовании SSL.
Ликвидация в коде psql обращения по нулевому указателю, которое наблюдалось на некоторых платформах (Квентин Рамо)
Обеспечение ожидаемого порядка в выводе pg_dump одинаково названных триггеров и объектов политики защиты на уровне строк (Бенджи Гиллам)
Ранее, если два триггера разных таблиц назывались одинаково, они сортировались по OID, тогда как предпочтительнее была бы сортировка по имени таблицы. То же наблюдалось и с политиками RLS.
Восстановление совместимости pg_dump с серверами старее версии 8.3 (Том Лейн)
После одного из предыдущих исправлений pg_dump всегда пытался обратиться к каталогу
pg_opfamily, который появился только в версии 8.3.Реализация в pg_restore прочтения указания
-f -как «выводить в stdout» (Альваро Эррера)Тем самым поведение pg_restore синхронизируется с поведением других приложений, и в частности, в версиях до 12 это теперь работает так же, как и в pg_restore в 12-ой версии, что упрощает создание скриптов выгрузки/восстановления, работающих с разными версиями PostgreSQL. До этого изменения программа pg_restore интерпретировала это указание как «выводить в файл с именем
-», но такое поведение мало кому нужно.Улучшение в pg_upgrade проверок использования типа данных, представление которого изменилось, например
line(Томаш Вондра)Предыдущая реализация работала некорректно, когда такой тип данных оказывался базовым для домена или составного типа.
Выявление ошибок чтения файлов в процессе работы pg_basebackup (Дживан Чок)
Устранение в pg_basebackup излишних вызовов fsync() для выходных файлов; выполнение этого вызова только в конце резервного копирования (Микаэль Пакье)
Ранее в случае медленной синхронизации файлов были возможны сбои из-за тайм-аутов.
Отключение тайм-аутов в pg_rewind при подключении к работающему кластеру, по подобию pg_dump (Александр Кукушкин)
Исправление ошибки при работе pg_waldump с ключом
-s, когда запись продолжения WAL заканчивается ровно на границе страницы (Андрей Лепихов)Включение в pg_waldump поля
newitemoffв записи разделения страниц btree (Питер Гейган)Устранение ненужного перевода строк в выводе pg_waldump с ключом
--bkp-detailsпри описании WAL-записей, отражающих запись полных страниц (Андрес Фройнд)Устранение небольшой утечки памяти в pg_waldump (Андрес Фройнд)
Улучшение поведения vacuumdb с большим значением
--jobsв случае нехватки файловых дескрипторов (Michael Paquier)Исправление в PL/pgSQL обработки подмены составных типов (Том Лейн)
Теперь корректно обрабатывается случай, когда между вызовами одной функции на PL/pgSQL составной тип полностью удаляется и создаётся новый тип с тем же именем. Переменные составного типа теперь будут приводится в соответствие с новым определением.
Игнорирование в
contrib/amcheckнежурналируемых индексов при работе в режиме горячего резерва (Андрей Бородин, Питер Гейган)В этом контексте нежурналируемые индексы не обязательно должны быть в актуальном состоянии, поэтому проверять их не нужно.
Исправление в
contrib/intarrayклассов операторов GiST для корректной работы оператора<@с пустыми массивами (Том Лейн)Предложение вида
считается индексируемым, но при поиске по индексу могут не находится пустые массивы, тогда как они тривиальным образом удовлетворяют этому условию.столбец_массив<@константный_массивЕдинственным вариантом исправления, подходящим для переноса в старые версии, видится требование сканирования всего индекса для оператора
<@, что и было реализовано. К сожалению, это означает, что такой поиск будет менее эффективен, чем простое последовательное сканирование.Для приложений, производительность которых значительно пострадает от этого изменения, можно предложить два выхода: переключиться на индексы GIN, в которых нет такого дефекта, или заменить конструкцию
настолбец_массив<@константный_массив. Таким образом будет получена примерно та же производительность, что и раньше, и будут найдены все непустые подмножества данного константного массива, чего и можно было ранее ожидать от изначального запроса.столбец_массив<@константный_массивANDстолбец_массив&&константный_массивИсправление в configure проверки наличия libperl для совместимости с последними выпусками Red Hat (Том Лейн)
Ранее проверка могла не работать, когда пользователь устанавливал в
CFLAGSзначение-O0.Обеспечение корректной генерации кода циклических блокировок (spinlock) на PowerPC (Ной Миш)
В предыдущей реализации таких блокировок компилятор мог выбрать нулевой регистр для использования в ассемблерной инструкции, которая этот регистр не принимает. Следствием этого были ошибки при сборке. Мы обнаружили глубоко в истории только одно сообщение о подобной ошибке, но вообще проблемы могли возникать у тех, кто собирал модифицированный код PostgreSQL или использовал нестандартные параметры компилятора.
Ликвидация зависимости от функции компилятора xlc,
__fetch_and_add()на PowerPC (Ной Миш)Компилятор xlc версии 13 и новее интерпретирует эту функцию не так, как мы рассчитываем, в результате чего сборка PostgreSQL оказывается нерабочей. Для исправления был написан специальный ассемблерный код.
Отказ от использования ключа компилятора
-qsrcmsgв AIX (Ной Миш)Таким образом удалось обойти внутреннюю ошибку компилятора xlc v16.1.0, и это повлияло лишь на формат выдаваемых компилятором сообщений об ошибках.
Исправление процедуры сборки MSVC для корректной обработки пробелов в пути к OpenSSL (Эндрю Дунстан)
Обновление данных часовых поясов до версии tzdata 2019c, включающее изменения правил перевода на летнее время на Фиджи и острове Норфолк, а также корректировку исторических данных для Альберты, Австрии, Бельгии, Британской Колумбии, Камбоджи, Гонконга, штата Индиана (графства Перри), Калининграда, штатов Кентукки и Мичиган, острова Норфолк, Южной Кореи и Турции.
E.49. Release 11.6
Release date: 2019-11-14
This release contains a variety of fixes from 11.5. For information about new features in major release 11, see Section E.55.
E.49.1. Migration to Version 11.6
A dump/restore is not required for those running 11.X.
However, if you use the contrib/intarray extension with a GiST index, and you rely on indexed searches for the <@ operator, see the entry below about that.
Also, if you are upgrading from a version earlier than 11.1, see Section E.54.
E.49.2. Changes
Fix failure of
ALTER TABLE SETwith a custom relation option (Michael Paquier)Disallow changing a multiply-inherited column's type if not all parent tables were changed (Tom Lane)
Previously, this was allowed, whereupon queries on the now-out-of-sync parent would fail.
Avoid failure if the same target table is specified twice in an
ANALYZEcommand inside a transaction block (Tom Lane)Prevent
VACUUMfrom trying to freeze an old multixact ID involving a still-running transaction (Nathan Bossart, Jeremy Schneider)This case would lead to
VACUUMfailing until the old transaction terminates.SET CONSTRAINTS ... DEFERREDfailed on partitioned tables, incorrectly complaining about lack of triggers (Álvaro Herrera)Fix failure when creating indexes for a partition, if the parent partitioned table contains any dropped columns (Michael Paquier)
Fix planner's test for case-foldable characters in
ILIKEwith an ICU collation (Tom Lane)This mistake caused the planner to treat too much of the pattern as being a fixed prefix, so that indexscans derived from an
ILIKEclause might miss entries that they should find.Ensure that offset expressions in
WINDOWclauses are processed when a query's expressions are manipulated (Andrew Gierth)This oversight could result in assorted failures when the offsets are nontrivial expressions. One example is that a function parameter reference in such an expression would fail if the function was inlined.
Fix handling of whole-row variables in
WITH CHECK OPTIONexpressions and row-level-security policy expressions (Andres Freund)Previously, such usage might result in bogus errors about row type mismatches.
Avoid postmaster failure if a parallel query requests a background worker when no postmaster child process array slots remain free (Tom Lane)
Prevent possible double-free if a
BEFORE UPDATEtrigger returns the old tuple as-is, and it is not the last such trigger (Thomas Munro)Fix crash if
, or related operations, contains a constant-null array (Tom Lane)x= ANY (array)Fix “unexpected relkind” error when a query tries to access a TOAST table (John Hsu, Michael Paquier, Tom Lane)
The error should say that permission is denied, but this case got broken during code refactoring.
Provide a relevant error context line when an error occurs while setting GUC parameters during parallel worker startup (Thomas Munro)
In serializable mode, ensure that row-level predicate locks are acquired on the correct version of the row (Thomas Munro, Heikki Linnakangas)
If the visible version of the row is HOT-updated, the lock might be taken on its now-dead predecessor, resulting in subtle failures to guarantee serialization.
Ensure that
fsync()is applied only to files that are opened read/write (Andres Freund, Michael Paquier)Some code paths tried to do this after opening a file read-only, but on some platforms that causes “bad file descriptor” or similar errors.
Allow encoding conversion to succeed on longer strings than before (Álvaro Herrera, Tom Lane)
Previously, there was a hard limit of 0.25GB on the input string, but now it will work as long as the converted output is not over 1GB.
Avoid an unnecessary catalog lookup during heap page pruning (Thomas Munro)
It's no longer necessary to check for unlogged indexes here, and the check caused significant performance problems in some workloads. There was also at least a theoretical possibility of deadlock.
Avoid creating unnecessarily-bulky tuple stores for window functions (Andrew Gierth)
In some cases the tuple storage would include all columns of the source table(s), not just the ones that are needed by the query.
Fix failure to JIT-compile equality comparisons for grouping hash tables, leading to performance loss (Andres Freund)
Allow
repalloc()to give back space when a large chunk is reduced in size (Tom Lane)Ensure that temporary WAL and history files are removed at the end of archive recovery (Sawada Masahiko)
Avoid failure in archive recovery if
recovery_min_apply_delayis enabled (Fujii Masao)recovery_min_apply_delayis not typically used in this configuration, but it should work.Fix logical replication failure when publisher and subscriber have different ideas about a table's replica identity columns (Jehan-Guillaume de Rorthais, Peter Eisentraut)
Declaring a column as part of the replica identity on the subscriber, when it does not exist at all on the publisher, led to “negative bitmapset member not allowed” errors.
Avoid unwanted delay during shutdown of a logical replication walsender (Craig Ringer, Álvaro Herrera)
Fix timeout handling in logical replication walreceiver processes (Julien Rouhaud)
Erroneous logic prevented
wal_receiver_timeoutfrom working in logical replication deployments.Correctly time-stamp replication messages for logical decoding (Jeff Janes)
This oversight resulted, for example, in
pg_stat_subscription.last_msg_send_timeusually reading as NULL.In logical decoding, ensure that sub-transactions are correctly accounted for when reconstructing a snapshot (Masahiko Sawada)
This error leads to assertion failures; it's unclear whether any bad effects exist in production builds.
Fix race condition during backend exit, when the backend process has previously waited for synchronous replication to occur (Dongming Liu)
Fix
ALTER SYSTEMto cope with duplicate entries inpostgresql.auto.conf(Ian Barwick)ALTER SYSTEMitself will not generate such a state, but external tools that modifypostgresql.auto.confcould do so. Duplicate entries for the target variable will now be removed, and then the new setting (if any) will be appended at the end.Reject include directives with empty file names in configuration files, and report include-file recursion more clearly (Ian Barwick, Tom Lane)
Avoid logging complaints about abandoned connections when using PAM authentication (Tom Lane)
libpq-based clients will typically make two connection attempts when a password is required, since they don't prompt their user for a password until their first connection attempt fails. Therefore the server is coded not to generate useless log spam when a client closes the connection upon being asked for a password. However, the PAM authentication code hadn't gotten that memo, and would generate several messages about a phantom authentication failure.
Fix some cases where an incomplete date specification is not detected in
time with time zoneinput (Alexander Lakhin)If a time zone with a time-varying UTC offset is specified, then a date must be as well, so that the offset can be resolved. Depending on the syntax used, this check was not enforced in some cases, allowing bogus output to be produced.
Fix misbehavior of
bitshiftright()(Tom Lane)The bitstring right shift operator failed to zero out padding space that exists in the last byte of the result when the bitstring length is not a multiple of 8. While invisible to most operations, any nonzero bits there would result in unexpected comparison behavior, since bitstring comparisons don't bother to ignore the extra bits, expecting them to always be zero.
If you have inconsistent data as a result of saving the output of
bitshiftright()in a table, it's possible to fix it with something likeUPDATE mytab SET bitcol = ~(~bitcol) WHERE bitcol != ~(~bitcol);
Restore the ability to take type information from an
ASclause injson[b]_populate_record()andjson[b]_populate_recordset()(Tom Lane)If the record argument is NULL and has no declared composite type, try to use the
ASclause instead. This isn't recommended usage, but it used to work, and now does again.Avoid crash when selecting a namespace node in
XMLTABLE(Chapman Flack)Fix detection of edge-case integer overflow in interval multiplication (Yuya Watari)
Fix memory leaks in
lower(),upper(), andinitcap()functions when using ICU collations (Konstantin Knizhnik)Avoid crashes if
ispelltext search dictionaries contain wrong affix data (Arthur Zakirov)Fix incorrect compression logic for GIN posting lists (Heikki Linnakangas)
A GIN posting list item can require 7 bytes if the distance between adjacent indexed TIDs exceeds 16TB. One step in the logic was out of sync with that, and might try to write the value into a 6-byte buffer. In principle this could cause a stack overrun, but on most architectures it's likely that the next byte would be unused alignment padding, making the bug harmless. In any case the bug would be very difficult to hit.
Fix handling of infinity, NaN, and NULL values in KNN-GiST (Alexander Korotkov)
The query's output order could be wrong (different from a plain sort's result) if some distances computed for non-null column values are infinity or NaN.
Fix handling of searches for NULL in KNN-SP-GiST (Nikita Glukhov)
On Windows, recognize additional spellings of the “Norwegian (Bokmål)” locale name (Tom Lane)
Avoid compile failure if an ECPG client includes
ecpglib.hwhile havingENABLE_NLSdefined (Tom Lane)This risk was created by a misplaced declaration:
ecpg_gettext()should not be visible to client code.In psql, resynchronize internal state about the server after an unexpected connection loss and successful reconnection (Peter Billen, Tom Lane)
Ordinarily this is unnecessary since the state would be the same anyway. But it can matter in corner cases, such as where the connection might lead to one of several servers. This change causes psql to re-issue any interactive messages that it would have issued at startup, for example about whether SSL is in use.
Avoid platform-specific null pointer dereference in psql (Quentin Rameau)
In pg_dump, ensure stable output order for similarly-named triggers and row-level-security policy objects (Benjie Gillam)
Previously, if two triggers on different tables had the same names, they would be sorted in OID-based order, which is less desirable than sorting them by table name. Likewise for RLS policies.
Fix pg_dump to work again with pre-8.3 source servers (Tom Lane)
A previous fix caused pg_dump to always try to query
pg_opfamily, but that catalog doesn't exist before version 8.3.In pg_restore, treat
-f -as meaning “output to stdout” (Álvaro Herrera)This synchronizes pg_restore's behavior with some other applications, and in particular makes pre-v12 branches act similarly to version 12's pg_restore, simplifying creation of dump/restore scripts that work across multiple PostgreSQL versions. Before this change, pg_restore interpreted such a switch as meaning “output to a file named
-”, but few people would want that.Improve pg_upgrade's checks for the use of a data type that has changed representation, such as
line(Tomas Vondra)The previous coding could be fooled by cases where the data type of interest underlies a stored column of a domain or composite type.
Detect file read errors during pg_basebackup (Jeevan Chalke)
In pg_basebackup, don't fsync output files until the end of backup (Michael Paquier)
The previous coding could result in timeout failures if fsync was slow.
In pg_rewind with an online source cluster, disable timeouts, much as pg_dump does (Alexander Kukushkin)
Fix failure in pg_waldump with the
-soption, when a continuation WAL record ends exactly at a page boundary (Andrey Lepikhov)In pg_waldump, include the
newitemofffield in btree page split records (Peter Geoghegan)In pg_waldump with the
--bkp-detailsoption, avoid emitting extra newlines for WAL records involving full-page writes (Andres Freund)Fix small memory leak in pg_waldump (Andres Freund)
Fix vacuumdb with a high
--jobsoption to handle running out of file descriptors better (Michael Paquier)Fix PL/pgSQL to handle replacements of composite types better (Tom Lane)
Cover the case where a composite type is dropped entirely, and then a new type of the same name is created, between executions of a PL/pgSQL function. Variables of the composite type will now update to match the new definition.
Fix
contrib/amcheckto skip unlogged indexes during hot standby (Andrey Borodin, Peter Geoghegan)An unlogged index won't necessarily contain valid data in this context, so don't try to check it.
Fix
contrib/intarray's GiST opclasses to not fail for empty arrays with<@(Tom Lane)A clause like
is considered indexable, but the index search may not find empty array values; of course, such entries should trivially match the search.array_column<@constant_arrayThe only practical back-patchable fix for this requires making
<@index searches scan the whole index, which is what this patch does. This is unfortunate: it means that the query performance is likely worse than a plain sequential scan would be.Applications whose performance is adversely impacted by this change have a couple of options. They could switch to a GIN index, which doesn't have this bug, or they could replace
witharray_column<@constant_array. That will provide about the same performance as before, and it will find all non-empty subsets of the given constant array, which is all that could reliably be expected of the query before.array_column<@constant_arrayANDarray_column&&constant_arrayFix configure's test for presence of libperl so that it works on recent Red Hat releases (Tom Lane)
Previously, it could fail if the user sets
CFLAGSto-O0.Ensure correct code generation for spinlocks on PowerPC (Noah Misch)
The previous spinlock coding allowed the compiler to select register zero for use with an assembly instruction that does not accept that register, causing a build failure. We have seen only one long-ago report that matches this bug, but it could cause problems for people trying to build modified PostgreSQL code or use atypical compiler options.
On PowerPC, avoid depending on the xlc compiler's
__fetch_and_add()function (Noah Misch)xlc 13 and newer interpret this function in a way incompatible with our usage, resulting in an unusable build of PostgreSQL. Fix by using custom assembly code instead.
On AIX, don't use the compiler option
-qsrcmsg(Noah Misch)This avoids an internal compiler error with xlc v16.1.0, with little consequence other than changing the format of compiler error messages.
Fix MSVC build process to cope with spaces in the file path of OpenSSL (Andrew Dunstan)
Update time zone data files to tzdata release 2019c for DST law changes in Fiji and Norfolk Island, plus historical corrections for Alberta, Austria, Belgium, British Columbia, Cambodia, Hong Kong, Indiana (Perry County), Kaliningrad, Kentucky, Michigan, Norfolk Island, South Korea, and Turkey.