E.48. Выпуск 10.2
Дата выпуска: 2018-02-08
В этот выпуск вошли различные исправления, внесённые после версии 10.1. За информацией о нововведениях версии 10 обратитесь к Разделу E.50.
E.48.1. Миграция на версию 10.2
Если используется версия 10.X, выгрузка/восстановление базы не требуется.
Однако если вы используете оператор ~> расширения contrib/cube, прочитайте ниже запись о нём.
Также, если вы обновляете сервер с более ранней версии, чем 10.1, см. Раздел E.49.
E.48.2. Изменения
Исправление обработки ключей секционирования, содержащих несколько выражений (Альваро Эррера. Дэвид Роули)
Эта ошибка приводила к сбоям или, со специально сконструированными данными, к раскрытию произвольного содержимого памяти обслуживающего процесса. (CVE-2018-1052)
Временные файлы, создаваемые программой pg_upgrade, должны быть недоступны для чтения всеми пользователями (Том Лейн, Ной Миш)
Программа pg_upgrade обычно ограничивает доступ к своим временным файлам, чтобы их мог читать и записывать только запускающий её пользователь. Но временные файлы, содержащие вывод
pg_dumpall -gмогли быть доступны для чтения группе или всем пользователям, а возможно и для записи, если это допускало значениеumaskэтого пользователя. При типичном использовании в многопользовательских системахumaskи/или разрешения в рабочем каталоге достаточно жёсткие и эта проблема неактуальна; но pg_upgrade может использоваться и в сценариях, где это упущение могло привести, например, к утечке паролей баз данных. (CVE-2018-1053)Исправление очистки кортежей, которые были изменены при установленной блокировке разделяемого ключа (Андрес Фройнд, Альваро Эррера)
В некоторых случаях операция
VACUUMне удаляла такие кортежи, даже когда они теряли актуальность, что приводило к различным сценариям повреждения данных.Исправление упущения, когда метастраница хеш-индекса не помечалась как «грязная» после добавления новой страницы переполнения, что могло приводить к порче индекса (Лисянь Цзоу, Амит Капила)
Осуществление очистки очереди добавлений индекса GIN при выполнении VACUUM (Масахико Савада)
Это необходимо для гарантированного удаления неактуальных записей индекса. Прежний код делал это в другом порядке, позволяя операции VACUUM пропускать очистку, если какие-то другие процессы производили очистку параллельно. Однако при этом в индексе могли оставаться некорректные записи.
Исправление неправильной блокировки буфера при некоторых чтениях LSN (Якоб Чемпион, Асим Правин, Ашвин Агравал)
Эти ошибки могли приводит к некорректному поведению при многопоточной нагрузке. Потенциальные последствия не были характеризованы полностью.
Исправление некорректных результатов запросов в случаях, когда происходило упрощение подзапросов, результаты которых использовались в
GROUPING SETS(Хейкки Линнакангас)Исправление обработки ограничений секционирования по списку с ключами секционирования логического типа и массивами (Амит Ланготе)
Исключение неоправданной ошибки в запросе с деревом наследования, который выполнялся одновременно с тем, как некоторая дочерняя таблица удалялась из этого дерева командой
ALTER TABLE NO INHERIT(Том Лейн)Устранение разнообразных ошибок взаимоблокировки при выполнении в нескольких сеансах команды
CREATE INDEX CONCURRENTLY(Джефф Джейнс)Изменение полей размера таблицы в процессе
VACUUM FULLна более раннем этапе (Амит Капила)Это предупреждает неоптимальное поведение при перестраивании хеш-индексов таблицы, так как для расчёта начального размера хеша используется статистика
pg_class.Исправление работы
UNION/INTERSECT/EXCEPTс нулём столбцов (Том Лейн)Запрет использования столбцов идентификации с типизированными таблицами и секциями (Микаэль Пакье)
Такое использование теперь будет считаться неподдерживаемым.
Исправление разнообразных ошибок, когда в столбец идентификации при добавлении записи не вставлялось правильное значение по умолчанию (Микаэль Пакье, Питер Эйзентраут)
В некоторых контекстах, а именно в
COPYиALTER TABLE ADD COLUMN, ожидаемое значение по умолчанию не применялось, а вместо него вставлялось значение NULL.Устранение ошибок в ситуациях, когда дерево наследования содержит дочерние сторонние таблицы (Эцуро Фудзита)
Комбинация обычных и сторонних таблиц в дереве наследования провоцировала построение некорректных планов в запросах
UPDATEиDELETE. Это приводило к видимым ошибкам в некоторых случаях, особенно когда в дочерней сторонней таблице присутствовали триггеры уровня строк.Исправление дефекта со связанным подзапросом
SELECTвнутриVALUESв подзапросеLATERAL(Том Лейн)Устранение ошибки планировщика «could not devise a query plan for the given query» (не удалось выработать план для данного запроса) в некоторых случаях, включая вложенные
UNION ALLв подзапросе LATERAL (Том Лейн)Реализована возможность использовать статистику функциональной зависимости для логических столбцов (Том Лейн)
Ранее, хотя расширенную статистику можно было объявить и собирать по логическим столбцам, планировщик не мог её применить.
Устранение недооценивания количества групп, выдаваемых подзапросами, в которых вызываются функции, возвращающие множества, в группируемых столбцах (Том Лейн)
В случаях, подобных
SELECT DISTINCT unnest(foo), в версии 10.0 приблизительная оценка количества строк стала давать меньшее число по сравнению с предыдущими версиями, что могло приводить к выбору неоптимальных планов. Теперь восстановлен предыдущий алгоритм оценивания.Исправление работы триггеров в процессах логической репликации (Петр Желинек)
Исправление логического декодирования, чтобы файлы на диске корректно очищались от данных сбойных транзакций (Атсуши Торикоши)
Процедура логического декодирования может выносить записи WAL на диск, если транзакции генерируют много записей WAL. Обычно эти файлы очищаются после фиксирования транзакции или поступления записи о её прерывании; но в отсутствие таких записей код очистки работал неправильно.
Исправление тайм-аута в процессе walsender и реакции на прерывания при обработке большой транзакции (Петр Желинек)
Устранение условий гонки при удалении источника репликации, когда ожидание удаляющего процесса могло быть бесконечным (Том Лейн)
Предоставление членам роли
pg_read_all_statsвозможности видеть статистику walsender в представленииpg_stat_replication(Фейке Стинберген)Отображение процессов walsender, передающих базовые резервные копии, как активные в представлении
pg_stat_activity(Магнус Хагандер)Исправление обозначения метода аутентификации
scram-sha-256в представленииpg_hba_file_rules(Микаэль Пакье)Ранее его название выводилось как
scram-sha256, что могло смущать пользователей некорректным написанием.Добавление в
has_sequence_privilege()поддержки проверокWITH GRANT OPTION, как это сделано в других функциях проверки прав (Джо Конвей)В базах данных с кодировкой UTF8 любые XML-объявления, выбирающие другую кодировку, должны игнорироваться (Павел Стехуле, Ной Миш)
Мы всегда храним документы XML в кодировке базы данных, так что позволяя libxml обрабатывать объявления с другой кодировкой, мы получим ошибочные результаты. Если кодировка базы — не UTF8, мы в любом случае не обещали поддерживать XML-данные с не ASCII-кодировкой, так что предыдущее поведение сохранено для совместимости ошибок. Это изменение затрагивает только
xpath()и связанные функции; другой код и ранее работал так.Обеспечение прямой совместимости с будущими изменениями младших версий протокола (Роберт Хаас, Бадрул Чоудхури)
Ранее серверы PostgreSQL просто отклоняли запросы на использование версий протокола новее 3.0, так что никакого функционального отличия старших номеров от младших не было. Теперь клиенты могут запрашивать версии 3.x и получать в ответ не отказ, а сообщение, говорящее, что сервер поддерживает только версию 3.0. В данный момент от этого ничего не меняется, но перенос этого изменения в предыдущие версии должен ускорить внедрение небольших усовершенствований протокола в будущем.
Предоставление возможности клиенту, поддерживающему привязку канала SCRAM, (в частности libpq v11 или новее) подключаться к серверу v10 (Микаэль Пакье)
Версия 10 не реализует такую функциональность, и согласование её использования производилось некорректно.
Предотвращение долгоживущих циклов в
ConditionVariableBroadcast()(Том Лейн, Томас Манро)При неудачно сложившихся временных интервалах процесс, пытающийся разбудить все спящие процессы по условной переменной, мог зацикливаться на неопределённое время. Вследствие ограниченного использования условных переменных в v10, эта проблема затрагивала только параллельные сканирования индексов и некоторые операции со слотами репликации.
Корректный сброс ожиданий условных переменных при прерывании подтранзакции (Роберт Хаас)
Обеспечение своевременного завершения всех дочерних процессов, ожидающих условные переменные, в случае прекращения работы процесса postmaster (Том Лейн)
Устранение сбоев параллельных процессов при использовании более чем одного узла Gather (Томас Манро)
Ликвидация зависания в процессе параллельного сканирования индекса при обработке удалённой или наполовину неактуальной страницы индекса (Амит Капила)
Предотвращение краха в случае, когда при параллельном сканировании битовой карты не удаётся выделить сегмент разделяемой памяти (Роберт Хаас)
Исправление реакции на сбой при запуске параллельного рабочего процесса (Амит Капила, Роберт Хаас)
Ранее параллельный запрос мог зависнуть на неопределённое время, если не удавалось запустить рабочий процесс, вследствие ошибки в
fork()или других редких проблем.Исключение неоправданной ошибки, которая выдавалась, когда не удавалось получить параллельные исполнители при запуске параллельного запроса (Роберт Хаас)
Исправление сбора статистики
EXPLAIN, получаемой от параллельных исполнителей (Амит Капила, Томас Манро)Строки запросов, передаваемые параллельным исполнителям, всегда должны завершаться нулём (Томас Манро)
Это предотвращает вывод мусора в журнал главного процесса от таких исполнителей.
Устранение небезопасного предположения о выравнивании при работе с типом
__int128(Том Лейн)Обычно компиляторы полагают, что переменные
__int128выравниваются по 16-байтовым границам, но наша инфраструктура выделения памяти не готова гарантировать это, а увеличение MAXALIGN кажется неподходящим по множеству причин. В качестве решения код был изменён так, чтобы тип__int128можно было использовать только когда мы можем сказать компилятору, что предполагается не такое крупное выравнивание. Единственный замеченный симптом этой проблемы — сбои в некоторых параллельных запросах с агрегированием.Предотвращение сбоев с переполнением стека при планировании операций со множествами с крайне большой вложенностью (
UNION/INTERSECT/EXCEPT) (Том Лейн)Предотвращение краха при перепроверке EvalPlanQual в узле сканирования индекса, являющимся внутренним потомком соединения слиянием (Том Лейн)
Это могло происходить только при изменении или выборке
SELECT FOR UPDATEданных соединения, когда одновременно изменялись некоторые выбранные строки.Устранение ошибки в процессе автоочистки, когда расширенная статистика для таблицы определена, но не может быть вычислена (Альваро Эррера)
Ликвидация обращений по нулевому указателю для некоторых типов адресов LDAP, задаваемых в файле
pg_hba.conf(Томас Манро)Предотвращение исчерпания памяти из-за разрастания простых хеш-таблиц (Томаш Вондра, Андрес Фройнд)
Исправление демонстрационных функций
INSTR()в документации по PL/pgSQL (Юго Нагата, Том Лейн)В документации утверждалось, что эти функции совместимы с Oracle®, но это было не совсем так. В частности, по-разному интерпретировалось отрицательное значение третьего параметра: Oracle воспринимает это значение как последнюю позицию, с которой может начинаться целевая подстрока, а наши функции считали, что это последняя позиция, где строка может заканчиваться. Также Oracle выдаёт ошибку в случае нулевого или отрицательного четвёртого параметра, тогда как наши функции возвращали ноль.
Код этого примера был изменён для большего соответствия поведению Oracle. Пользователям, которые скопировали этот код в свои приложения, возможно, имеет смысл обновить свои копии.
Исправление поведения pg_dump, чтобы ACL (разрешения), комментарии и метки безопасности можно было надёжно идентифицировать в архивных выходных форматах (Том Лейн)
Компонент «метка» записи ACL в архиве обычно представлял собой просто имя целевого объекта. В его начало теперь добавляется тип объекта, чтобы записи ACL соответствовали соглашениям, уже принятым для записей комментариев и меток безопасности. Кроме того, обозначения комментариев и меток безопасности, заданных для собственно базы данных, теперь должны начинаться с
DATABASE, чтобы они соответствовали тому же соглашению. Это предупреждает ложные срабатывания в коде, который пытается найти записи больших объектов по строкам, начинающимся со словLARGE OBJECT. Прежнее поведение могло приводить к неправильной классификации записей как данные и нежелательным результатам при восстановлении выгруженной только схемы или только данных.Заметьте, что следствием этого стало изменение видимого пользователями вывода
pg_restore --list.Переименование функции
copy_file_rangeв pg_rewind во избежание конфликта с новым системным вызовом Linux с таким же именем (Андрес Фройнд)Это изменение предотвращает ошибки при сборке с новыми версиями glibc.
В ecpg добавлено выявление массивов индикаторов с неправильной длиной и сообщение об ошибке (Дэвид Рейдер)
Изменение поведения оператора
cube~>intв расширенииcontrib/cubeдля обеспечения его совместимости с поиском kNN (Александр Коротков)Смысл второго аргумента (выбирающего размерность) был изменён, чтобы можно было определённо сказать, какое именно значение выбирается в кубах переменных размерностей.
Это изменение нарушает совместимость, но так как этот оператор предназначался для поисков kNN, в прежнем виде он был бесполезен. После установки этого обновления все материализованные представления или индексы с выражениями, использующими этот оператор, необходимо обновить/перестроить.
Предотвращение срабатывания проверки истинности внутри libc в расширении
contrib/hstoreиз-за использованияmemcpy()с равными указателями источника и получателя (Томаш Вондра)Исправление некорректного отображения битовых карт NULL для кортежей в
contrib/pageinspect(Максим Милютин)Исправление некорректного вывода функции
hash_page_items()расширенияcontrib/pageinspect(Масахико Савада)В расширении
contrib/postgres_fdwликвидирована ошибка планировщика «outer pathkeys do not match mergeclauses» (внешние ключи пути не соответствуют предложениям слияния) при построении плана, включающего удалённое соединение (Роберт Хаас)В
contrib/postgres_fdwпредотвращён сбой планировщика при дублировании элементовGROUP BY(Дживан Чок)Добавление современных примеров настройки автозапуска Postgres в macOS (Том Лейн)
Скрипты в
contrib/start-scripts/osxиспользуют инфраструктуру, которая устарела десять лет назад, и абсолютно неработоспособны во всех версиях macOS, выпущенных в последние два года. Добавлен новый подкаталогcontrib/start-scripts/macosсо скриптами, использующими новую инфраструктуру launchd.Исправление некорректного выбора зависящих от конфигурации библиотек OpenSSL в Windows (Эндрю Дунстан)
Поддержка компоновки с версиями libperl, собранными компилятором MinGW (Ной Миш)
Это позволяет собирать PL/Perl с некоторыми распространёнными дистрибутивами Perl для Windows.
Исправление в сборке MSVC проверки, требуется ли 32-битной libperl определение
-D_USE_32BIT_TIME_T(Ной Миш)Имеющиеся дистрибутивы Perl ожидают разного, и при этом нет никакой возможности надёжно проверить это, поэтому пришлось добавить проверку фактического поведения используемой библиотеки во время компиляции.
В Windows обработчик аварийного завершения должен устанавливаться на более раннем этапе запуска главного процесса (Такаюки Цунакава)
Это поможет получить дамп памяти при ошибках в те моменты в начале запуска, в которые раньше дамп не записывался.
В Windows устранены сбои, связанные с преобразованием кодировок при выводе сообщений на самых ранних стадиях запуска процесса postmaster (Такаюки Цунакава)
Использование нашего ранее написанного кода циклических блокировок для Motorola 68K во OpenBSD, а также в NetBSD (Давид Карлье)
Добавление поддержки циклических блокировок для Motorola 88K (Давид Карлье)
Обновление данных часовых поясов до версии tzdata 2018c, включающее изменения правил перехода на летнее время в Бразилии, в Сан-Томе и Принсипи, а также корректировки исторических данных для Боливии, Японии и Южного Судана. Был удалён часовой пояс
US/Pacific-New(это был просто псевдоним для поясаAmerica/Los_Angeles).
E.48. Release 10.2
Release date: 2018-02-08
This release contains a variety of fixes from 10.1. For information about new features in major release 10, see Section E.50.
E.48.1. Migration to Version 10.2
A dump/restore is not required for those running 10.X.
However, if you use contrib/cube's ~> operator, see the entry below about that.
Also, if you are upgrading from a version earlier than 10.1, see Section E.49.
E.48.2. Changes
Fix processing of partition keys containing multiple expressions (Álvaro Herrera, David Rowley)
This error led to crashes or, with carefully crafted input, disclosure of arbitrary backend memory. (CVE-2018-1052)
Ensure that all temporary files made by pg_upgrade are non-world-readable (Tom Lane, Noah Misch)
pg_upgrade normally restricts its temporary files to be readable and writable only by the calling user. But the temporary file containing
pg_dumpall -goutput would be group- or world-readable, or even writable, if the user'sumasksetting allows. In typical usage on multi-user machines, theumaskand/or the working directory's permissions would be tight enough to prevent problems; but there may be people using pg_upgrade in scenarios where this oversight would permit disclosure of database passwords to unfriendly eyes. (CVE-2018-1053)Fix vacuuming of tuples that were updated while key-share locked (Andres Freund, Álvaro Herrera)
In some cases
VACUUMwould fail to remove such tuples even though they are now dead, leading to assorted data corruption scenarios.Fix failure to mark a hash index's metapage dirty after adding a new overflow page, potentially leading to index corruption (Lixian Zou, Amit Kapila)
Ensure that vacuum will always clean up the pending-insertions list of a GIN index (Masahiko Sawada)
This is necessary to ensure that dead index entries get removed. The old code got it backwards, allowing vacuum to skip the cleanup if some other process were running cleanup concurrently, thus risking invalid entries being left behind in the index.
Fix inadequate buffer locking in some LSN fetches (Jacob Champion, Asim Praveen, Ashwin Agrawal)
These errors could result in misbehavior under concurrent load. The potential consequences have not been characterized fully.
Fix incorrect query results from cases involving flattening of subqueries whose outputs are used in
GROUPING SETS(Heikki Linnakangas)Fix handling of list partitioning constraints for partition keys of boolean or array types (Amit Langote)
Avoid unnecessary failure in a query on an inheritance tree that occurs concurrently with some child table being removed from the tree by
ALTER TABLE NO INHERIT(Tom Lane)Fix spurious deadlock failures when multiple sessions are running
CREATE INDEX CONCURRENTLY(Jeff Janes)During
VACUUM FULL, update the table's size fields inpg_classsooner (Amit Kapila)This prevents poor behavior when rebuilding hash indexes on the table, since those use the
pg_classstatistics to govern the initial hash size.Fix
UNION/INTERSECT/EXCEPTover zero columns (Tom Lane)Disallow identity columns on typed tables and partitions (Michael Paquier)
These cases will be treated as unsupported features for now.
Fix assorted failures to apply the correct default value when inserting into an identity column (Michael Paquier, Peter Eisentraut)
In several contexts, notably
COPYandALTER TABLE ADD COLUMN, the expected default value was not applied and instead a null value was inserted.Fix failures when an inheritance tree contains foreign child tables (Etsuro Fujita)
A mix of regular and foreign tables in an inheritance tree resulted in creation of incorrect plans for
UPDATEandDELETEqueries. This led to visible failures in some cases, notably when there are row-level triggers on a foreign child table.Repair failure with correlated sub-
SELECTinsideVALUESinside aLATERALsubquery (Tom Lane)Fix “could not devise a query plan for the given query” planner failure for some cases involving nested
UNION ALLinside a lateral subquery (Tom Lane)Allow functional dependency statistics to be used for boolean columns (Tom Lane)
Previously, although extended statistics could be declared and collected on boolean columns, the planner failed to apply them.
Avoid underestimating the number of groups emitted by subqueries containing set-returning functions in their grouping columns (Tom Lane)
Cases similar to
SELECT DISTINCT unnest(foo)got a lower output rowcount estimate in 10.0 than they did in earlier releases, possibly resulting in unfavorable plan choices. Restore the prior estimation behavior.Fix use of triggers in logical replication workers (Petr Jelinek)
Fix logical decoding to correctly clean up disk files for crashed transactions (Atsushi Torikoshi)
Logical decoding may spill WAL records to disk for transactions generating many WAL records. Normally these files are cleaned up after the transaction's commit or abort record arrives; but if no such record is ever seen, the removal code misbehaved.
Fix walsender timeout failure and failure to respond to interrupts when processing a large transaction (Petr Jelinek)
Fix race condition during replication origin drop that could allow the dropping process to wait indefinitely (Tom Lane)
Allow members of the
pg_read_all_statsrole to see walsender statistics in thepg_stat_replicationview (Feike Steenbergen)Show walsenders that are sending base backups as active in the
pg_stat_activityview (Magnus Hagander)Fix reporting of
scram-sha-256authentication method in thepg_hba_file_rulesview (Michael Paquier)Previously this was printed as
scram-sha256, possibly confusing users as to the correct spelling.Fix
has_sequence_privilege()to supportWITH GRANT OPTIONtests, as other privilege-testing functions do (Joe Conway)In databases using UTF8 encoding, ignore any XML declaration that asserts a different encoding (Pavel Stehule, Noah Misch)
We always store XML strings in the database encoding, so allowing libxml to act on a declaration of another encoding gave wrong results. In encodings other than UTF8, we don't promise to support non-ASCII XML data anyway, so retain the previous behavior for bug compatibility. This change affects only
xpath()and related functions; other XML code paths already acted this way.Provide for forward compatibility with future minor protocol versions (Robert Haas, Badrul Chowdhury)
Up to now, PostgreSQL servers simply rejected requests to use protocol versions newer than 3.0, so that there was no functional difference between the major and minor parts of the protocol version number. Allow clients to request versions 3.x without failing, sending back a message showing that the server only understands 3.0. This makes no difference at the moment, but back-patching this change should allow speedier introduction of future minor protocol upgrades.
Allow a client that supports SCRAM channel binding (such as v11 or later libpq) to connect to a v10 server (Michael Paquier)
v10 does not have this feature, and the connection-time negotiation about whether to use it was done incorrectly.
Avoid live-lock in
ConditionVariableBroadcast()(Tom Lane, Thomas Munro)Given repeatedly-unlucky timing, a process attempting to awaken all waiters for a condition variable could loop indefinitely. Due to the limited usage of condition variables in v10, this affects only parallel index scans and some operations on replication slots.
Clean up waits for condition variables correctly during subtransaction abort (Robert Haas)
Ensure that child processes that are waiting for a condition variable will exit promptly if the postmaster process dies (Tom Lane)
Fix crashes in parallel queries using more than one Gather node (Thomas Munro)
Fix hang in parallel index scan when processing a deleted or half-dead index page (Amit Kapila)
Avoid crash if parallel bitmap heap scan is unable to allocate a shared memory segment (Robert Haas)
Cope with failure to start a parallel worker process (Amit Kapila, Robert Haas)
Parallel query previously tended to hang indefinitely if a worker could not be started, as the result of
fork()failure or other low-probability problems.Avoid unnecessary failure when no parallel workers can be obtained during parallel query startup (Robert Haas)
Fix collection of
EXPLAINstatistics from parallel workers (Amit Kapila, Thomas Munro)Ensure that query strings passed to parallel workers are correctly null-terminated (Thomas Munro)
This prevents emitting garbage in postmaster log output from such workers.
Avoid unsafe alignment assumptions when working with
__int128(Tom Lane)Typically, compilers assume that
__int128variables are aligned on 16-byte boundaries, but our memory allocation infrastructure isn't prepared to guarantee that, and increasing the setting of MAXALIGN seems infeasible for multiple reasons. Adjust the code to allow use of__int128only when we can tell the compiler to assume lesser alignment. The only known symptom of this problem so far is crashes in some parallel aggregation queries.Prevent stack-overflow crashes when planning extremely deeply nested set operations (
UNION/INTERSECT/EXCEPT) (Tom Lane)Avoid crash during an EvalPlanQual recheck of an indexscan that is the inner child of a merge join (Tom Lane)
This could only happen during an update or
SELECT FOR UPDATEof a join, when there is a concurrent update of some selected row.Fix crash in autovacuum when extended statistics are defined for a table but can't be computed (Álvaro Herrera)
Fix null-pointer crashes for some types of LDAP URLs appearing in
pg_hba.conf(Thomas Munro)Prevent out-of-memory failures due to excessive growth of simple hash tables (Tomas Vondra, Andres Freund)
Fix sample
INSTR()functions in the PL/pgSQL documentation (Yugo Nagata, Tom Lane)These functions are stated to be Oracle® compatible, but they weren't exactly. In particular, there was a discrepancy in the interpretation of a negative third parameter: Oracle thinks that a negative value indicates the last place where the target substring can begin, whereas our functions took it as the last place where the target can end. Also, Oracle throws an error for a zero or negative fourth parameter, whereas our functions returned zero.
The sample code has been adjusted to match Oracle's behavior more precisely. Users who have copied this code into their applications may wish to update their copies.
Fix pg_dump to make ACL (permissions), comment, and security label entries reliably identifiable in archive output formats (Tom Lane)
The “tag” portion of an ACL archive entry was usually just the name of the associated object. Make it start with the object type instead, bringing ACLs into line with the convention already used for comment and security label archive entries. Also, fix the comment and security label entries for the whole database, if present, to make their tags start with
DATABASEso that they also follow this convention. This prevents false matches in code that tries to identify large-object-related entries by seeing if the tag starts withLARGE OBJECT. That could have resulted in misclassifying entries as data rather than schema, with undesirable results in a schema-only or data-only dump.Note that this change has user-visible results in the output of
pg_restore --list.Rename pg_rewind's
copy_file_rangefunction to avoid conflict with new Linux system call of that name (Andres Freund)This change prevents build failures with newer glibc versions.
In ecpg, detect indicator arrays that do not have the correct length and report an error (David Rader)
Change the behavior of
contrib/cube'scube~>intoperator to make it compatible with KNN search (Alexander Korotkov)The meaning of the second argument (the dimension selector) has been changed to make it predictable which value is selected even when dealing with cubes of varying dimensionalities.
This is an incompatible change, but since the point of the operator was to be used in KNN searches, it seems rather useless as-is. After installing this update, any expression indexes or materialized views using this operator will need to be reindexed/refreshed.
Avoid triggering a libc assertion in
contrib/hstore, due to use ofmemcpy()with equal source and destination pointers (Tomas Vondra)Fix incorrect display of tuples' null bitmaps in
contrib/pageinspect(Maksim Milyutin)Fix incorrect output from
contrib/pageinspect'shash_page_items()function (Masahiko Sawada)In
contrib/postgres_fdw, avoid “outer pathkeys do not match mergeclauses” planner error when constructing a plan involving a remote join (Robert Haas)In
contrib/postgres_fdw, avoid planner failure when there are duplicateGROUP BYentries (Jeevan Chalke)Provide modern examples of how to auto-start Postgres on macOS (Tom Lane)
The scripts in
contrib/start-scripts/osxuse infrastructure that's been deprecated for over a decade, and which no longer works at all in macOS releases of the last couple of years. Add a new subdirectorycontrib/start-scripts/macoscontaining scripts that use the newer launchd infrastructure.Fix incorrect selection of configuration-specific libraries for OpenSSL on Windows (Andrew Dunstan)
Support linking to MinGW-built versions of libperl (Noah Misch)
This allows building PL/Perl with some common Perl distributions for Windows.
Fix MSVC build to test whether 32-bit libperl needs
-D_USE_32BIT_TIME_T(Noah Misch)Available Perl distributions are inconsistent about what they expect, and lack any reliable means of reporting it, so resort to a build-time test on what the library being used actually does.
On Windows, install the crash dump handler earlier in postmaster startup (Takayuki Tsunakawa)
This may allow collection of a core dump for some early-startup failures that did not produce a dump before.
On Windows, avoid encoding-conversion-related crashes when emitting messages very early in postmaster startup (Takayuki Tsunakawa)
Use our existing Motorola 68K spinlock code on OpenBSD as well as NetBSD (David Carlier)
Add support for spinlocks on Motorola 88K (David Carlier)
Update time zone data files to tzdata release 2018c for DST law changes in Brazil, Sao Tome and Principe, plus historical corrections for Bolivia, Japan, and South Sudan. The
US/Pacific-Newzone has been removed (it was only an alias forAmerica/Los_Angelesanyway).