E.53. Выпуск 11.2
Дата выпуска: 2019-02-14
В этот выпуск вошли различные исправления, внесённые после версии 11.1. За информацией о нововведениях версии 11 обратитесь к Разделу E.55.
E.53.1. Миграция на версию 11.2
Если используется версия 11.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 11.1, см. также Раздел E.54.
E.53.2. Изменения
- Во избежание повреждения данных вместо повторения вызова - fsync()при ошибке теперь выполняется аварийный останов (Крейг Рингер, Томас Манро)- В ряде популярных операционных систем ядро сбрасывает буферы данных, не имея возможности сохранить их на диске, и выдаёт ошибку в - fsync(). При этом повторный вызов- fsync()будет успешным, но на самом деле данные уже потеряны, так что продолжение работы сервера чревато повреждением базы. В случае же аварийного останова мы можем воспроизвести данные из WAL, где в такой ситуации может остаться единственная копия данных. Хотя это, определённо, неэффективное и не очень красивое поведение, других вариантов нет, а подобные ситуации, к счастью, крайне редки.- Для управления этим поведением был добавлен новый параметр сервера data_sync_retry; если вы уверены, что ядро вашей ОС не теряет незаписанные буферы данных при описанном сценарии, вы можете задать для - data_sync_retryзначение- onи восстановить прежнее поведение.
- Отныне в документацию каждой версии включаются только замечания к выпускам, относящимся к данной основной версии, а не к выпускам данной и всех предшествующих версий, как было раньше (Том Лейн) - Дублирование информации, присущее прежней схеме, вышло за допустимые рамки. Теперь мы не дублируем замечания к выпускам в каждой версии, но планируем поддерживать их полный архив на сайте нашего проекта. 
- Исправление поведения уникальных индексов, содержащих неключевые столбцы ( - INCLUDE), в секционированных таблицах (Альваро Эррера)- В таких индексах условие уникальности не проверялось должным образом. 
- Обеспечение контроля ограничений - NOT NULLв секциях секционированной таблицы (Альваро Эррера, Амит Ланготе)
- Корректное изменение свойств ограничений секционированной таблицы в каталоге при отсоединении её секций (Амит Ланготе, Альваро Эррера) - Ранее поле - pg_constraint.- conislocalдля таких ограничений могло сохранять неверное значение- false, что не позволяло затем это ограничение удалить. Эта проблема устранится после выгрузки/восстановления данных или pg_upgrade, но при необходимости данное поле можно изменить и вручную.
- Корректное создание и удаление триггеров, обеспечивающих целостность внешнего ключа, при подключении и отключении секции в секционированной таблице с ограничением внешнего ключа (Амит Ланготе, Альваро Эррера) 
- Предотвращение создания повторяющихся ограничений внешнего ключа в секционированных таблицах (Альваро Эррера) 
- При создании индекса с указанием - ONLYв секционируемой таблице, которая пока ещё не содержит секций, он должен сразу считаться проверенным (Альваро Эррера)- В противном случае нет никакой возможности сделать его проверенным. 
- Использование безопасного уровня блокировки таблицы при отсоединении секции (Альваро Эррера) - Ранее блокировка была недостаточно сильной и позволяла параллельно производить с таблицей DDL-операции, что могло привести к нежелательным результатам. 
- Устранение проблем с применением - ON COMMIT DROPи- ON COMMIT DELETE ROWSк секционированным таблицам и таблицам с потомками в иерархии наследования (Микаэль Пакье)
- Недопущение выполнения - COPY FREEZEс секционированными таблицами (Дэвид Роули)- Принципиально данный режим должен поддерживаться, но реализация может потребовать слишком сложных изменений, переносить которые в ранние версии рискованно. 
- Устранение возможности повреждения индекса, содержащего столбец с «быстрым значением по умолчанию» (то есть, добавленный командой - ALTER TABLE ADD COLUMNс постоянным значением по умолчанию, отличным от NULL, когда таблица уже содержала какие-то строки) (Андрес Фройнд)
- Корректное изменение «быстрых значений по умолчанию» при выполнении - ALTER TABLE ... ALTER COLUMN TYPE(Эндрю Дунстан)
- Предупреждение возможных взаимоблокировок при попытке блокирования множества страниц в буфере (Нишант Фну) 
- Предупреждение взаимоблокировки процесса очистки GIN с параллельными операциями добавления в индекс (Александр Коротков, Андрей Бородин, Питер Гейган) - Вследствие этого изменения пришлось частично отказаться от оптимизации, добавленной в версии 10.0 с целью сократить число индексных страниц, блокируемых при удалении страницы списка идентификаторов GIN. Было обнаружено, что она приводит к взаимоблокировкам, так что мы отключили её на время разбирательства. 
- Недопущение взаимоблокировки запросов на сервере горячего резерва с воспроизведением операций удаления страниц индекса GIN (Александр Коротков) 
- Устранение возможности сбоев при логической репликации в случае использования индексов с выражениями или предикатами (Питер Эйзентраут) 
- Исключение бесполезного и дорогостоящего логического декодирования данных TOAST при перезаписи таблицы (Томаш Вондра) 
- Исправление логики остановки подмножества передатчиков WAL при включении синхронной репликации (Пол Гуо, Микаэль Пакье) 
- Устранение возможности сохранения некорректного значения идентификатора реплики в записи WAL об удалении кортежа (Стас Кельвич) 
- Предотвращение некорректного применения оптимизации с пропуском WAL во время выполнения - COPYв представление или стороннюю таблицу (Амит Ланготе, Микаэль Пакье)
- Повышение приоритета файлов истории WAL по отношению к другим файлам данных WAL при выборе архиватором очередных файлов для архивации (Дэвид Стил) 
- Устранение возможности сбоя в - UPDATEс множественным- SETи вложенным- SELECTв качестве источника данных (Том Лейн)
- Устранение сбоя при поступлении нуля строк в - json[b]_populate_recordset()и- json[b]_to_recordset()(Том Лейн)
- Устранение сбоя в случае, когда libxml2 возвращает null вместо сообщения об ошибке (Серхио Конде Гомес) 
- Исправление ошибочного кода JIT-обработки кортежей для таблиц, содержащих большое количество столбцов (порядка 800 и более) (Андрес Фройнд) 
- Устранение утечки памяти и проблемы с производительностью при группировке по хешу (Андрес Фройнд) 
- Устранение ложных ошибок разбора, связанных с группировкой, которые были вызваны несогласованной обработкой присваиваний с правилами сортировки (Эндрю Гирт) - В некоторых случаях выражения, которые должны были считаться совместными, не считались таковыми, если они включали операции с типами данных, поддерживающими правила сортировки. 
- Исправление разбора выражений, зависящих от правил сортировки, в аргументах оператора - CALL(Питер Эйзентраут)
- Обеспечение корректной очистки после выявления ошибки в списке аргументов оператора - CALL(Том Лейн)
- Вместо презумпции герметичности функции сравнения, которую вызывают функции - LEAST()или- GREATEST(), реализована соответствующая проверка (Том Лейн)- Собственно утечку информации из функций сравнения btree обычно сложно организовать, но в принципе это возможно. 
- Исправление некорректного планирования запросов с вложенными циклами над и под узлом Gather в плане (Том Лейн) - Если на обоих уровнях вложенного цикла требовалось передать одну и ту же переменную в правую сторону, мог быть построен некорректный план. 
- Исправлено некорректное планирование запросов, в которых подзапрос LATERAL должен выполняться при сканировании сторонней таблицы (Том Лейн) 
- Исправлена ошибка планировщика, проявлявшаяся, когда первый столбец сравниваемых строк соответствует столбцу индекса, а последующие нет, и при этом индекс содержит неключевые столбцы (Том Лейн) 
- Исправлена ошибка при оценке стоимости соединения слиянием, проявляющаяся в особом случае (Том Лейн) - Планировщик мог предпочесть соединение слиянием, когда диапазон внешнего ключа был намного меньше диапазона внутреннего ключа, даже при наличии множества повторяющихся ключей с внутренней стороны, а это плохой выбор. 
- Предотвращение увеличения времени планирования порядка O(N^2) с запросами, содержащими тысячи индексируемых выражений (Том Лейн) 
- Увеличение скорости планирования для большой иерархии наследования или групп секционированных таблиц (Амит Ланготе, Эцуро Фудзита) 
- Улучшение обработки параллельно изменяемых строк в ходе - ANALYZE(Джефф Джейнс, Том Лейн)- Ранее строки, удаляемые текущими транзакциями, исключались из выборки операции - ANALYZE, но обнаружилось, что это нарушает согласованность в большей степени, чем их включение. Теперь выборка по сути соответствует снимку MVCC на момент запуска- ANALYZE.
- Операция - TRUNCATEтеперь игнорирует дочерние таблицы, являющиеся временными таблицами других сеансов (Амит Ланготе, Микаэль Пакье)- Таким образом поведение - TRUNCATEтеперь соответствует поведению других команд. Ранее в таких случаях обычно происходил сбой.
- Исправление обновления счётчиков статистики в ходе - TRUNCATEдля нужной таблицы (Том Лейн)- Если с опустошаемой таблицей была связана таблица TOAST, по ошибке сбрасывались счётчики последней. 
- Корректная обработка - ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS(Грег Старк)
- Поддержка команды - UNLISTENв режиме горячего резерва (Шэй Роджански)- Эта команда не должна ничего делать, так как - LISTENне допускается в режиме горячего резерва, но возможность выполнения этой пустой операции упрощает логику сброса состояния для клиентов.
- Исправление зависимостей ролей в списках прав для схем и типов данных (Том Лейн) - В некоторых случаях имелась возможность удалить роль, которой были назначены права. Эта проблема не проявлялась сразу, но при выгрузке/восстановлении или обновлении могли возникнуть ошибки, в частности выражающиеся в неудачных попытках назначить права ролям с числовыми именами. 
- Недопущение использования временной схемы сеанса в двухфазных транзакциях (Микаэль Пакье) - Обращение к временным таблицам в таких транзакциях было запрещено уже давно, однако оставалась возможность выполнять другие недопустимые операции с временными объектами. 
- Обеспечение корректного сброса кеша отношений после добавления или удаления ограничений внешнего ключа (Альваро Эррера) - В результате устранённого теперь упущения в существующих сеансах могло не действовать только что созданное ограничение или продолжало действовать удалённое. 
- Обеспечение должного обновления кешей отношений после переименования ограничений (Амит Ланготе) 
- Исправление воспроизведения операций микроочистки индекса GiST, устраняющее возможность получения несогласованного состояния в параллельных запросах на серверах горячего резерва (Александр Коротков) 
- Недопущение досрочной утилизации пустых страниц индекса GIN, чреватой ошибками при параллельном поиске по индексу (Андрей Бородин, Александр Коротков) 
- Исправление проявляющихся в граничных случаях ошибок преобразования чисел с плавающей точкой в целые (Эндрю Гирт) - Значения, ненамного превышающие максимально возможное целое, могли приниматься, а затем, в результате переполнения, превращаться в минимально возможное целое. Кроме того, могли ошибочно не допускаться значения, которые при округлении должны были преобразовываться в минимальное или максимальное допустимое целое. 
- Исправлен разбор параметра - ldapserver, который содержит разделённый пробелами список имён серверов в записях типа LDAP в- pg_hba.conf(Томас Манро)
- В запросе аутентификации PAM значение - PAM_RHOSTне должно задаваться для соединений, установленных через сокет Unix (Томас Манро)- Ранее эта переменная принимала значение - [local], которое как минимум было бесполезным, так как в ней ожидается имя узла.
- Недопущение в - client_min_messagesболее высоких уровней, чем- ERROR(Джона Харрис, Том Лейн)- Ранее в этой переменной можно было установить уровень - FATALили- PANIC, в результате чего подавлялась передача клиенту обычных сообщений об ошибках. Однако это противоречит гарантиям, заложенным в протоколе обмена данными PostgreSQL, и некоторые клиенты могут этого не понять. В уже выпущенных версиях исправление заключается в неявной подмене таких уровней значением- ERROR, а начиная с версии 12, они просто не будут приниматься.
- Переход в ecpglib к использованию функции - uselocale()или- _configthreadlocale()вместо- setlocale()(Михаэль Мескес, Том Лейн)- Так как функция - setlocale()не является внутрипотоковой и может быть даже непотокобезопасной, предыдущая реализация вызывала проблемы в многопоточных приложениях на базе ecpg.
- Исправление ошибочных результатов при получении числовых данных через область дескриптора SQLDA ecpg (Дайсукэ Хигути) - Ранее значения с ведущими нулями копировались некорректно. 
- Исправление метакоманды psql - \g- назначениедля операции- COPY TO STDOUT(Даниэль Верите)- Ранее параметр - назначениеигнорировался, и копируемые данные всегда попадали в текущий поток вывода.
- Исправление обработки специальных символов для вывода psql в формате LaTeX (Том Лейн) - Ранее обратная косая черта и некоторые другие знаки препинания из ASCII выводились некорректно, следствием чего были ошибки синтаксиса в документе или отображение некорректных символов. 
- Замена алгоритма генерирования случайных чисел в pgbench на полностью детерминированный и платформонезависимый в случае указания параметра - --random-seed=(Фабьен Коэльо, Том Лейн)- N- На конкретной платформе последовательность, получаемая с определённым значением - N, будет скорее всего отличаться от той, что выдавалась до этого исправления.
- Исправление выбора игнорируемых временных файлов в pg_basebackup и pg_verify_checksums (Михаэль Банк, Микаэль Пакье) 
- Исправление обработки программой pg_dump материализованных представлений с неявными зависимостями от первичных ключей (Том Лейн) - В результате этой ошибки могли неправильно помечаться записи таких представлений в архиве, что приводило к безобидным предупреждениям «archive items not in correct section order» (в последовательности элементов архива нарушен порядок разделов); и, что более значимо, могли некорректно работать варианты избирательного восстановления, например с указанием таких меток в - --section.
- Включение в вывод pg_dump команд - ALTER INDEX SET STATISTICS(Микаэль Пакье)- Когда появилась возможность добавлять ориентиры статистики к выражениям индекса, мы забыли ознакомить с ней pg_dump, так что эта метаинформация терялась при выгрузке/восстановлении. 
- Исправление в pg_dump выгрузки таблиц с OID (Питер Эйзентраут) - Ранее предложение - WITH OIDSопускалось, если оно должно было добавляться к первой таблице, подлежащей выгрузке.
- Устранение сбоя, имевшего место на некоторых платформах при обращении по нулевому указателю, когда pg_dump или pg_restore пытались вывести ошибку (Том Лейн) 
- Предупреждение ложных сообщений о разрушении индекса, которые выдавал - contrib/amcheck, встречая внутренне сжатые данные (Питер Гейган)
- Игнорирование ошибок - SIGPIPEв случаях, когда- COPY FROM PROGRAMпрекращает читать вывод программы досрочно (Том Лейн)- Такие случаи невозможны на практике именно с - COPY, но могут иметь место при использовании- contrib/file_fdw.
- Исправление в - contrib/hstoreвычисления хеша для пустых значений- hstore, созданных в версии 8.4 или более ранней (Эндрю Гирт)- В предыдущей реализации хеш для этих значений вычислялся не так, как для пустых значений - hstore, созданных более поздней версией, вследствие чего соединения или агрегирования по хешу могли выполняться неправильно. Поэтому имеет смысл переиндексировать все хеш-индексы, построенные по столбцам- hstore, если таблицы могут содержать данные, которые были внесены ещё в версии 8.4 или раньше и с тех пор никогда не проходили через выгрузку/восстановление.
- Устранение сбоев и ускорение операций при обработке данных большого объёма операторами класса - gist__int_opsмодуля- contrib/intarray(Эндрю Гирт)
- Установление в скрипте configure следующего порядка поиска - python: собственно- python, затем- python3, и только потом- python2(Питер Эйзентраут)- Это позволяет конфигурировать PL/Python, не задавая явно переменную окружения - PYTHONна тех платформах, где теперь отсутствует программа- pythonбез версии.
- Включение заголовочных файлов, относящихся к JIT, в набор устанавливаемых заголовочных файлов (Дональд Донг) 
- Добавление поддержки новых переменных - PG_CFLAGS,- PG_CXXFLAGSи- PG_LDFLAGSв Makefile для pgxs (Кристоф Берг)- Это упрощает организацию нестандартных процессов сборки расширений. 
- Исправление написанных на Perl скриптов сборки, чтобы они не полагались на присутствие элемента « - .» в пути поиска, так как в последних версиях Perl он отсутствует (Эндрю Дунстан)
- Устранение проблем с разбором параметров командной строки в OpenBSD (Том Лейн) 
- Перемещение вызова - set_rel_pathlist_hook, чтобы расширения могли использовать его для передачи частичных путей при выполнении параллельных запросов (КайГай Кохэй)- Ожидается, что это никак не повлияет на существующие сценарии использования. 
- Обновление данных часовых поясов до версии tzdata 2018i, включающее изменения правил перехода на летнее время в Казахстане, Метлакатле и на Сан-Томе и Принсипи. Часовой пояс Кызылорды в Казахстане разделился на два, при этом появился новый пояс Asia/Qostanay (Азия/Костанай), а в некоторых областях смещение UTC не изменилось. Также скорректированы исторические данные для Гонконга и многочисленных тихоокеанских островов.