E.10. Выпуск 9.5.16
Дата выпуска: 2019-02-14
В этот выпуск вошли различные исправления, внесённые после версии 9.5.15. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.10.1. Миграция на версию 9.5.16
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 9.5.13, см. Раздел E.16.
E.10.2. Изменения
- Во избежание повреждения данных вместо повторения вызова - fsync()при ошибке теперь выполняется аварийный останов (Крейг Рингер, Томас Манро)- В ряде популярных операционных систем ядро сбрасывает буферы данных, не имея возможности сохранить их на диске, и выдаёт ошибку в - fsync(). При этом повторный вызов- fsync()будет успешным, но на самом деле данные уже потеряны, так что продолжение работы сервера чревато повреждением базы. В случае же аварийного останова мы можем воспроизвести данные из WAL, где в такой ситуации может остаться единственная копия данных. Хотя это, определённо, неэффективное и не очень красивое поведение, других вариантов нет, а подобные ситуации, к счастью, крайне редки.- Для управления этим поведением был добавлен новый параметр сервера data_sync_retry; если вы уверены, что ядро вашей ОС не теряет незаписанные буферы данных при описанном сценарии, вы можете задать для - data_sync_retryзначение- onи восстановить прежнее поведение.
- Отныне в документацию каждой версии включаются только замечания к выпускам, относящимся к данной основной версии, а не к выпускам данной и всех предшествующих версий, как было раньше (Том Лейн) - Дублирование информации, присущее прежней схеме, вышло за допустимые рамки. Теперь мы не дублируем замечания к выпускам в каждой версии, но планируем поддерживать их полный архив на сайте нашего проекта. 
- Предупреждение возможных взаимоблокировок при попытке блокирования множества страниц в буфере (Нишант Фну) 
- Недопущение взаимоблокировки запросов на сервере горячего резерва с воспроизведением операций удаления страниц индекса GIN (Александр Коротков) 
- Устранение возможности сбоев при логической репликации в случае использования индексов с выражениями или предикатами (Питер Эйзентраут) 
- Исключение бесполезного и дорогостоящего логического декодирования данных TOAST при перезаписи таблицы (Томаш Вондра) 
- Исправление логики остановки подмножества передатчиков WAL при включении синхронной репликации (Пол Гуо, Микаэль Пакье) 
- Устранение возможности сохранения некорректного значения идентификатора реплики в записи WAL об удалении кортежа (Стас Кельвич) 
- Повышение приоритета файлов истории WAL по отношению к другим файлам данных WAL при выборе архиватором очередных файлов для архивации (Дэвид Стил) 
- Устранение возможности сбоя в - UPDATEс множественным- SETи вложенным- SELECTв качестве источника данных (Том Лейн)
- Устранение сбоя в случае, когда libxml2 возвращает null вместо сообщения об ошибке (Серхио Конде Гомес) 
- Устранение ложных ошибок разбора, связанных с группировкой, которые были вызваны несогласованной обработкой присваиваний с правилами сортировки (Эндрю Гирт) - В некоторых случаях выражения, которые должны были считаться совместными, не считались таковыми, если они включали операции с типами данных, поддерживающими правила сортировки. 
- Вместо презумпции герметичности функции сравнения, которую вызывают функции - LEAST()или- GREATEST(), реализована соответствующая проверка (Том Лейн)- Собственно утечку информации из функций сравнения btree обычно сложно организовать, но в принципе это возможно. 
- Исправлено некорректное планирование запросов, в которых подзапрос LATERAL должен выполняться при сканировании сторонней таблицы (Том Лейн) 
- Исправлена ошибка при оценке стоимости соединения слиянием, проявляющаяся в особом случае (Том Лейн) - Планировщик мог предпочесть соединение слиянием, когда диапазон внешнего ключа был намного меньше диапазона внутреннего ключа, даже при наличии множества повторяющихся ключей с внутренней стороны, а это плохой выбор. 
- Предотвращение увеличения времени планирования порядка O(N^2) с запросами, содержащими тысячи индексируемых выражений (Том Лейн) 
- Улучшение обработки параллельно изменяемых строк в ходе - ANALYZE(Джефф Джейнс, Том Лейн)- Ранее строки, удаляемые текущими транзакциями, исключались из выборки операции - ANALYZE, но обнаружилось, что это нарушает согласованность в большей степени, чем их включение. Теперь выборка по сути соответствует снимку MVCC на момент запуска- ANALYZE.
- Операция - TRUNCATEтеперь игнорирует дочерние таблицы, являющиеся временными таблицами других сеансов (Амит Ланготе, Микаэль Пакье)- Таким образом поведение - TRUNCATEтеперь соответствует поведению других команд. Ранее в таких случаях обычно происходил сбой.
- Исправление обновления счётчиков статистики в ходе - TRUNCATEдля нужной таблицы (Том Лейн)- Если с опустошаемой таблицей была связана таблица TOAST, по ошибке сбрасывались счётчики последней. 
- Поддержка команды - UNLISTENв режиме горячего резерва (Шэй Роджански)- Эта команда не должна ничего делать, так как - LISTENне допускается в режиме горячего резерва, но возможность выполнения этой пустой операции упрощает логику сброса состояния для клиентов.
- Исправление зависимостей ролей в списках прав для схем и типов данных (Том Лейн) - В некоторых случаях имелась возможность удалить роль, которой были назначены права. Эта проблема не проявлялась сразу, но при выгрузке/восстановлении или обновлении могли возникнуть ошибки, в частности выражающиеся в неудачных попытках назначить права ролям с числовыми именами. 
- Обеспечение должного обновления кешей отношений после переименования ограничений (Амит Ланготе) 
- Приложение дополнительных усилий для удаления потерянных временных таблиц в процессе автоочистки, а также при выполнении - DISCARD TEMP(Альваро Эррера)- В результате будут аккуратнее вычищаться следы деятельности прерванных сеансов. 
- Недопущение досрочной утилизации пустых страниц индекса GIN, чреватой ошибками при параллельном поиске по индексу (Андрей Бородин, Александр Коротков) 
- Исправление проявляющихся в граничных случаях ошибок преобразования чисел с плавающей точкой в целые (Эндрю Гирт) - Значения, ненамного превышающие максимально возможное целое, могли приниматься, а затем, в результате переполнения, превращаться в минимально возможное целое. Кроме того, могли ошибочно не допускаться значения, которые при округлении должны были преобразовываться в минимальное или максимальное допустимое целое. 
- Недопущение в - 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 выводились некорректно, следствием чего были ошибки синтаксиса в документе или отображение некорректных символов. 
- Исправление обработки программой pg_dump материализованных представлений с неявными зависимостями от первичных ключей (Том Лейн) - В результате этой ошибки могли неправильно помечаться записи таких представлений в архиве, что приводило к безобидным предупреждениям «archive items not in correct section order» (в последовательности элементов архива нарушен порядок разделов); и, что более значимо, могли некорректно работать варианты избирательного восстановления, например с указанием таких меток в - --section.
- Устранение сбоя, имевшего место на некоторых платформах при обращении по нулевому указателю, когда pg_dump или pg_restore пытались вывести ошибку (Том Лейн) 
- Исправление в - contrib/hstoreвычисления хеша для пустых значений- hstore, созданных в версии 8.4 или более ранней (Эндрю Гирт)- В предыдущей реализации хеш для этих значений вычислялся не так, как для пустых значений - hstore, созданных более поздней версией, вследствие чего соединения или агрегирования по хешу могли выполняться неправильно. Поэтому имеет смысл переиндексировать все хеш-индексы, построенные по столбцам- hstore, если таблицы могут содержать данные, которые были внесены ещё в версии 8.4 или раньше и с тех пор никогда не проходили через выгрузку/восстановление.
- Устранение сбоев и ускорение операций при обработке данных большого объёма операторами класса - gist__int_opsмодуля- contrib/intarray(Эндрю Гирт)
- Осуществляемый в configure выбор библиотек и флагов компилятора, связанных с многопоточностью, приведён в соответствие с принятым в последних версиях PostgreSQL (Том Лейн) - Схема, применявшаяся ранее для версий 9.4 и 9.5, перестала работать на некоторых новых платформах, поэтому решено было синхронизировать её с той, что применяется в версии 9.6 и выше. 
- Добавление поддержки новых переменных - PG_CFLAGS,- PG_CXXFLAGSи- PG_LDFLAGSв Makefile для pgxs (Кристоф Берг)- Это упрощает организацию нестандартных процессов сборки расширений. 
- Исправление написанных на Perl скриптов сборки, чтобы они не полагались на присутствие элемента « - .» в пути поиска, так как в последних версиях Perl он отсутствует (Эндрю Дунстан)
- Устранение проблем с разбором параметров командной строки в OpenBSD (Том Лейн) 
- Обновление данных часовых поясов до версии tzdata 2018i, включающее изменения правил перехода на летнее время в Казахстане, Метлакатле и на Сан-Томе и Принсипи. Часовой пояс Кызылорды в Казахстане разделился на два, при этом появился новый пояс Asia/Qostanay (Азия/Костанай), а в некоторых областях смещение UTC не изменилось. Также скорректированы исторические данные для Гонконга и многочисленных тихоокеанских островов.