E.43. Выпуск 9.5.2
Дата выпуска: 2016-03-31
В этот выпуск вошли различные исправления, внесённые после версии 9.5.1. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.45.
E.43.1. Миграция на версию 9.5.2
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако вследствие изменения, идущего первым в следующем списке, для некоторых индексов может потребоваться выполнить REINDEX
.
E.43.2. Изменения
Отключены сокращённые ключи при сортировке строк в локалях, отличных от
C
(Роберт Хаас)В PostgreSQL 9.5 появилась логика ускорения сравнения строковых типов данных с применением стандартной функции библиотеки C
strxfrm()
вместоstrcoll()
. Сейчас обнаружилось, что в большинстве версий glibc (реализации библиотеки С для Linux) функцияstrxfrm()
реализована с ошибками, то есть для некоторых локалей с ней получаются результаты сравнения строк, отличающиеся отstrcoll()
. Пока эта проблема не будет изучена глубже, такая оптимизация для всех локалей, отличных отC
, отключается. (ЛокальC
от этого не зависит, так как она не использует ниstrcoll()
, ниstrxfrm()
.)К сожалению, данная проблема затрагивает не только сортировку, но и упорядочивание записей в B-деревьях, а значит, индексы-B-деревья по столбцам типов
text
,varchar
илиchar
могут оказаться испорченными, если они сортировались с проблемной локалью и были построены или модифицированы версией PostgreSQL 9.5.0 или 9.5.1. Индексы, которые могли пострадать вследствие этой проблемы, следует перестроить (выполнивREINDEX
) .В данный момент невозможно определить исчерпывающий список проблемных локалей. Известно, что с локалью
C
всё в порядке, и с локалями английского языка, например,en_US
, тоже не замечено никаких проблем, но с некоторыми другими популярными локалями, напримерde_DE
, поведение некорректно в большинстве версий glibc.Корректное сохранение статуса защиты на уровне строк в кешируемых планах (Стивен Фрост)
В сеансе, выполняющем запросы с разными ролями, из кеша планов может быть некорректно взят план, построенный для другой роли, что может привести к применению ошибочного набора политик, когда активна защита на уровне строк (RLS). (CVE-2016-2193)
В некоторые новые функции
contrib/pageinspect
добавлены проверки суперпользователя (Андреас Зельтенрейх)Большинство функций в расширении
pageinspect
, исследующие значенияbytea
, не допускают вызова обычными пользователями, но вbrin_page_type()
иbrin_metapage_info()
такие ограничения отсутствуют. Однако, передав им изощрённо сформированные значенияbytea
, можно вызвать крах сервера или прочитать несколько байт памяти сервера. Поэтому были добавлены недостающие проверки во избежание подобных злоупотреблений. (CVE-2016-3065)Исправлено некорректное сравнение
ROW()
с применением индексов (Саймон Риггс)Ошибки в небольшой оптимизации, введённой в 9.5, приводили к некорректным результатам, если при сравнении
ROW()
имело место частичное соответствие индексу, но не точное (например, когда порядок столбцов другой или в индексе есть столбцы с сортировкой иASC
, иDESC
). Пока лучшее решение не найдено, эта оптимизация отключена.Исправлена некорректная обработка NULL в сравнениях
ROW()
с применением индексов (Том Лейн)Поиск по индексу со сравнением строк вида
ROW(a, b) > ROW('x', 'y')
останавливался, доходя до элемента NULL в столбцеb
, игнорируя тот факт, что с последующими значениямиa
могут быть связаны значенияb
, отличные от NULL.Предотвращение маловероятных сценариев потери данных в случае переименования файлов без соответствующих вызовов
fsync()
до и после (Микаэль Пакье, Томаш Вондра, Андрес Фройнд)Исправлено некорректное поведение при перепроверке только что изменённой строки в запросе, выполняющем
SELECT FOR UPDATE/SHARE
и обращающемся к отношениям, которые не нужно блокировать (Том Лейн)Строки из незаблокированных отношений некорректно воспринимались во время перепроверки как полностью содержащие NULL, что могло привести к неправильному выводу о том, что изменённая строка больше не удовлетворяет условию
WHERE
, или к выдаче NULL в результате.Исправлена ошибка в
json_to_record()
, возникавшая, когда поле входного объекта содержало вложенный объект с полем, имя которого совпадало с именем одного из запрошенных выходных столбцов (Том Лейн)Исправлен бессмысленный результат функции
jsonb_object()
в форме с двумя аргументами при вызове с пустыми массивами (Микаэль Пакье, Эндрю Дунстан)Исправлено некорректное поведение в
jsonb_set()
при преобразовании элемента массива путей в целое значение для использования в качестве индекса массива (Микаэль Пакье)Исправлено некорректное форматирование отрицательных смещений часовых поясов в функции
to_char()
с применением кода форматаOF
(Томас Мунро, Том Лейн)Исправлена некорректное протоколирование событий ожидания, имеющих место в
INSERT ... ON CONFLICT
(Питер Гейган)В выводимых сообщениях иногда отмечалось, что ожидание было вызвано ограничением-исключением, хотя такое ограничение было не при чём.
Параметр recovery_min_apply_delay игнорируется, пока восстановление не достигло согласованного состояния (Микаэль Пакье)
Ранее, резервные серверы откладывали применение записей WAL, учитывая
recovery_min_apply_delay
, даже при воспроизведении начальной порции WAL, необходимой для приведения базы данных в рабочее состояние. Так как резервный сервер бесполезен, пока он не достиг согласованного состояния базы данных, это кажется напрасным.Корректная обработка ситуаций, когда
pg_subtrans
на грани зацикливания XID при запуске сервера (Джефф Джейнс)Исправление разнообразных ошибок в логическом декодировании (Андрес Фройнд)
Проблемы возникали с кортежами больше одной страницы с вариантом идентификации реплики
FULL
, при выполнении командUPDATE
, изменяющих первичный ключ в транзакции, достаточно большой для выгрузки на диск, а также с некорректными ошибками «subxact logged without previous toplevel record» (транзакция внесена в журнал без предыдущей записи верхнего уровня) и с некорректным выводом времени фиксирования транзакций.Исправлена ошибка планировщика, возникавшая с вложенными представлениями с барьерами безопасности, когда внешнее представление содержит предложение
WHERE
с коррелирующим подзапросом (Дин Рашид)Ликвидирована утечка памяти при поиске по индексу GIN (Том Лейн)
Предотвращён крах в исключительной ситуации при попытке повторно освободить строки, выводимые
localeconv()
(Том Лейн)Исправлен разбор файлов аффиксов для словарей
ispell
(Том Лейн)Код разбора мог работать неправильно, если файл аффиксов содержит символы, которые могут менять размер в байтах при преобразовании регистра, как например, символ
I
в турецких локалях UTF8.Исключено использование
sscanf()
при разборе файлов словарейispell
(Артур Закиров)Это устраняет проблему переносимости на платформы на базе FreeBSD (включая macOS).
Исправление кода атомарных операций, генерируемого на PPC компилятором IBM xlc (Ной Миш)
Эта ошибка приводила к редким сбоям при параллельных операциях на этой платформе.
Предотвращение сбоя на старых версиях Windows (до 7SP1/2008R2SP1) с процессором с поддержкой AVX2 и с Postgres, собранным компилятором Visual Studio 2013 (Кристиан Ульрих)
Это обходное решение проблемы в библиотеки выполнения Visual Studio 2013, которая, как заявили в Microsoft, не будет исправляться в этой версии.
В psql исправлена логика завершения команд табуляцией с учётом особенностей многобайтных символов (Кётаро Хоригути, Роберт Хаас)
В psql исправлено завершение табуляцией команды
SECURITY LABEL
(Том Лейн)При нажатии TAB после ввода
SECURITY LABEL
мог произойти сбой или выдавались посторонние ключевые слова.Команда pg_ctl теперь принимает тайм-аут ожидания из переменной среды
PGCTLTIMEOUT
, если этот тайм-аут не задан в командной строке (Ной Миш)Это упрощает тестирование более медленных узлов на ферме сборки, позволяя индивидуально задавать время, превышающее обычное, для запуска и завершения главного процесса (postmaster).
Исправление ошибочной проверки состояния службы Windows в pg_ctl (Мануэль Матар)
В предыдущих корректирующих выпусках были попытки исправить pg_ctl, чтобы он правильно определял, нужно ли отправлять сообщения в журнал событий Window, но в итоге проверка оказалась противоположной.
Исправлено поведение pgbench, чтобы сочетание параметров
-C
и-M prepared
обрабатывалось корректно (Том Лейн)В pg_upgrade теперь пропускается создание скрипта удаления, когда новый каталог данных находится внутри старого (Брюс Момджян)
Выполнение этого скрипта «вслепую» в таких случаях приводило к потере нового каталога данных.
В PL/Perl пустые массивы Postgres стали корректно переводиться в пустые массивы Perl (Алекс Хансакер)
Код PL/Python адаптирован для работы с именами функций, не подходящими для идентификаторов Python (Джим Нэсби)
Исправление ряда ошибок в статистике, возвращаемой функцией
pgstatindex()
изcontrib/pgstattuple
(Том Лейн)Ликвидация зависимости от
psed
в сборках с MSVC, так как ядро Perl больше не предоставляет её (Микаэль Пакье, Эндрю Дунстан)Обновление данных часовых поясов до версии tzdata 2016c, включающее изменения правил перехода на летнее время в Азербайджане, Чили, на Гаити, в Палестине и России (в Алтайском крае, Астраханской, Кировской и Ульяновской областях, а также на Сахалине), плюс корректировку исторических данных для Литвы, Молдавии и России (для Калининграда, Самары и Волгограда).