E.23. Выпуск 9.6.2

Дата выпуска: 2017-02-09

В этот выпуск вошли различные исправления, внесённые после версии 9.6.1. За информацией о нововведениях версии 9.6 обратитесь к Разделу E.25.

E.23.1. Миграция на версию 9.6.2

Если используется версия 9.6.X, выгрузка/восстановление базы не требуется.

Однако если в вашей инсталляции проявилась ошибка, описанная в первой записи следующего списка изменений, после обновления вам может потребоваться предпринять дополнительные действия для исправления испорченных индексов.

Также, если вы обновляете сервер с версии, более ранней, чем 9.6.1, см. Раздел E.24.

E.23.2. Изменения

  • Исправление поведения в особых условиях, которое приводило к повреждению индексов, создаваемых командой CREATE INDEX CONCURRENTLY (Паван Деоласи, Том Лейн)

    Если команда CREATE INDEX CONCURRENTLY применялась для построения индекса, зависящего от столбца, ранее не индексированного, то у строк, изменяемых транзакциями, выполняемыми одновременно с командой CREATE INDEX, могли оказываться некорректные записи в индексе. В случае подозрений, что вас это коснулось, самое надёжное решение — перестроить такие индексы после установки этого обновления.

  • Предотвращение утери специального снимка, используемого при сканированиях каталога, при преждевременной очистке данных (Tom Lane)

    Рабочие процессы не учитывали этот снимок, сообщая о своём самом старом xmin, что оставляло возможность для удаления по-прежнему нужных данных параллельными операциями очистки. Это приводило к появлению плавающих ошибок с сообщениями «ошибка поиска в кеше для отношения 1255».

  • Исправление некорректной записи в WAL, формируемой для индексов BRIN (Кунтал Гхош)

    Запись WAL, выдаваемая для страницы BRIN «revmap» при перемещении кортежа индекса в другую страницу, была некорректной. При воспроизведении журнала соответствующая часть индекса становилась непригодной, и её требовалось вычислять заново.

  • Безусловное фиксирование в WAL создания «слоя инициализации» для нежурналируемых таблиц (Микаэль Пакье)

    Ранее это действие пропускалось при wal_level = minimal, но на самом деле это необходимо даже в этом случае, чтобы нежурналируемая таблица корректно создавалась пустой после сбоя.

  • Если процесс сборщика статистики потерян, перезапускать его и в режиме горячего резерва (Такаюки Цунакава)

  • Обеспечение корректной работы механизма уведомлений горячего резерва, когда он включается при запуске резервного сервера (Антс Аасма, Крейг Рингер)

  • Проверка прерываний в момент ожидания конфликтующего запроса сервером горячего резерва (Саймон Риггс)

  • Предупреждение постоянного перезапуска процесса запуска автоочистки в особых случаях (Амит Хандекар)

    Это исправление решает проблему, возникавшую, когда автоочистка номинально отключена и есть несколько таблиц, требующих «заморозки», но эти таблицы уже обработаны рабочими процессами автоочистки.

  • Недопущение установки нулевого значения для поля num_sync в synchronous_standby_names (Фудзии Масао)

    Правильный вариант отключения синхронных резервных серверов — задать пустую строку в качестве всего значения.

  • Не учитывать фоновые рабочие процессы при проверке ограничения на число подключений пользователя (Дэвид Роули)

  • Исправление проверки на возможность удаления объекта, принадлежащего расширению (Том Лейн)

    Скрипты обновления расширений должны иметь возможность удалять объекты расширений, но это запрещалось для последовательностей со столбцами serial, а также, возможно, в других случаях.

  • Исправление отслеживания начальных прав доступа для объектов, принадлежащих расширению, чтобы это корректно работало с ALTER EXTENSION ... ADD/DROP (Стивен Фрост)

    Текущие права доступа к объекту в момент добавления его в расширение теперь будут считаться правами по умолчанию; только в случае изменений они будут выгружаться при последующем выполнении pg_dump.

  • Команда ALTER TABLE должна сохранять назначения табличных пространств индексам при перестраивании индексов (Том Лейн, Микаэль Пакье)

    Ранее с нестандартными значениями default_tablespace были возможны разрушения индексов.

  • Исправление некорректного изменения свойств триггерной функции при изменении свойства «откладываемости» ограничения внешнего ключа с помощью команды ALTER TABLE ... ALTER CONSTRAINT (Том Лейн)

    Это приводило к странным сбоям при последующем обращении к внешнему ключу, так как триггеры срабатывали не в положенное время.

  • Недопущение удаления ограничения внешнего ключа при наличии событий, ожидающих обработки триггерами, для целевого отношения (Том Лейн)

    Это предотвращает ошибки «не удалось найти триггер NNN» и «в отношении NNN нет триггеров».

  • Исправление поведения ALTER TABLE ... SET DATA TYPE ... USING в случаях, когда порядок столбцов в дочерней таблице отличается от родительской (Альваро Эррера)

    Вследствие того, что столбцы в выражении USING не перенумеровывались, возникала ошибка, обычно такая: «атрибут N имеет неправильный тип».

  • Исправление обращения к столбцу OID в случаях, когда таблица с таким столбцом связывается с родительской, тоже с OID, посредством ALTER TABLE ... INHERIT (Амит Ланготе)

    В таких случаях столбец OID должен обрабатываться как обычный пользовательский столбец, но этого не происходило, что приводило к странному поведению при последующих изменениях наследования.

  • Команда CREATE TABLE ... LIKE ... WITH OIDS должна создавать таблицу с OID вне зависимости от того, есть ли OID в таблице, указанной в LIKE (Том Лейн)

  • Исправление поведения CREATE OR REPLACE VIEW — запрос представления должен изменяться до применения новых параметров представления (Дин Рашид)

    Ранее в команде происходил сбой, если новые параметры оказывались несогласованными со старым определением представления.

  • Получение правильного идентификатора объекта в ALTER TEXT SEARCH CONFIGURATION (Артур Закиров)

    Ранее расширениям, таким как модули логического декодирования, выдавался неправильный OID каталога.

  • Предупреждение сбоев механизма учёта времени транзакций при запросе особых XID (FrozenTransactionId и BootstrapTransactionId) (Крейг Рингер)

  • Исправление некорректного использования reloptions представлений как reloptions обычных таблиц (Том Лейн)

    Симптомами ошибки были неуместные сообщения «ON CONFLICT не поддерживается для таблицы ..., служащей таблицей каталога» когда целевым отношением INSERT ... ON CONFLICT было представление с каскадной проверкой.

  • Исправление некорректного сообщения «допустимое число элементов в целевом списке ограничено N» при использовании ON CONFLICT с широкими таблицами (Том Лейн)

  • Устранение ошибок с ложными сообщениями «в запросе обнаружены данные для удалённого столбца» при выполнении INSERT или UPDATE в таблице с удалённым столбцом (Том Лейн)

  • Предотвращение разворачивания foo.* в набор столбцов в исходном выражении UPDATE (Том Лейн)

    Это приводило к ошибкам с сообщением «несоответствие целевого количества в UPDATE --- внутренняя ошибка». Теперь эта запись воспринимается как обозначение переменной «вся-строка», как и в других контекстах.

  • Обеспечение точного определения модификаторов типа столбцов в конструкциях VALUES с несколькими строками (Том Лейн)

    Это устраняет проблемы, возникавшие, когда первое значение в столбце имеет воспринимаемый модификатор типа (например, длину значения varchar), но последующие значения не разделяют его ограничение.

  • При нахождении незаконченной суррогатной пары Unicode в конце строки символов Unicode должна выдаваться ошибка (Том Лейн)

    Обычно за начальным суррогатным символом Unicode должно следовать продолжение, но это не проверялось когда такой начальный символ оказывался последним в строке символов Unicode (U&'...') или в Unicode-идентификаторе (U&"...").

  • Корректировка выполнения агрегатов с DISTINCT и упорядочиванием, когда несколько таких агрегатов могут разделять одно состояние перехода (Хейкки Линнакангас)

  • Исправление реализации операторов поиска фраз в tsquery (Том Лейн)

    Ликвидация некорректных и применяемых несогласованно правил перезаписи, которые пытались оптимизировать операторы И/ИЛИ/НЕ внутри оператора поиска фразы; вместо этого обработка таких выражений была добавлена в сам исполнитель. В результате устранены разнообразные странности в поведении и возможные сбои в запросах полнотекстового поиска, содержащих такие выражения. Также реализовано разумное поведение вложенных операторов поиска фраз не только с простыми деревьями, растущими влево; исправлено поведение при удалении стоп-слов из предложения поиска фразы; обеспечена согласованность поиска по индексу и простого выполнения этих запросов с последовательным сканированием.

  • Определённо отрицательному поисковому запросу, например, !foo, должны удовлетворять пустые значения tsvector (Том Дунстан)

    Такие соответствия находились при поиске по индексу GIN, но не при последовательном сканировании или поиске по индексу GiST.

  • Предотвращение сбоя в ситуации, когда ts_rewrite() заменяет поддерево не верхнего уровня пустым запросом (Артур Закиров)

  • Устранение проблем с производительностью в ts_rewrite() (Том Лейн)

  • Исправление обработки в ts_rewrite() вложенных операторов NOT (Том Лейн)

  • Увеличение скорости пользовательских агрегатов, использующих в качестве перехода функцию array_append() (Том Лейн)

  • Исправление array_fill() для корректной обработки пустых массивов (Том Лейн)

  • Предупреждение возможных сбоев в функциях array_position() и array_positions() при обработке массивов записей (Джун-сок Ян)

  • Устранение выхода на один байт за границу буфера в функции quote_literal_cstr() (Хейкки Линнакангас)

    Этот выход имел место только если входная строка содержала исключительно апострофы и/или обратные косые черты.

  • Предотвращение одновременного выполнения вызовов pg_start_backup() и pg_stop_backup() (Микаэль Пакье)

    Это предупреждает сбой проверки истинности и, вероятно, худшие последствия, в случае, если кто-то попытается запустить эти функции параллельно.

  • Отключение трансформации, которая пыталась оптимизировать бесполезные преобразования AT TIME ZONE (Том Лейн)

    Вследствие этого выдавались неверные результаты, когда упрощённое выражение использовалось в условии индекса.

  • Сохранение приведений interval-в-interval, которые на самом деле несут смысловую нагрузку (Том Лейн)

    В некоторых случаях приведения, которые должны были обнулять младшие поля значений interval, ошибочно считались бессмысленными и просто убирались. В результате, например, при приведении значения типа INTERVAL MONTH к INTERVAL YEAR поле месяцев не обнулялось.

  • Устранения сбоя в ситуациях, когда число рабочих процессов, доступных для параллельных запросов, уменьшалось при повторном сканировании (Андреас Зельтенрейх)

  • Исправление ошибок при передаче значений параметров GUC параллельным исполнителям (Микаэль Пакье, Том Лейн)

  • Допущение возможности для операторов, подготовленных командой PREPARE, иметь параллельные планы (Амит Капила, Тобиас Бусман)

  • Исправление некорректного построения параллельных планов для полусоединений (Том Лейн)

  • Исправление оценок количества строк для параллельных соединений (Роберт Хаас)

    Эти оценки должны отражать количество строк, которое будет видеть отдельный рабочий процесс, а не общее их число.

  • Исправление планировщика, чтобы он не пытался распараллеливать узлы плана, содержащие вложенные и инициализирующие планы (Том Лейн, Амит Капила)

  • Аннулирование кешированных планов при изменениях в параметрах сторонних таблиц (Амит Ланготе, Эцуро Фудзита, Ашутош Бапат)

  • Исправление плана, формируемого для частичного агрегирования с выражением GROUP BY с константой (Том Лейн)

  • Исправление ошибки планировщика «не удалось найти план для CTE» при обработке конструкции UNION ALL, включающей CTE (Том Лейн)

  • Исправление некорректной обработки инициализирующих планов при принудительном добавлении узла Material во вложенный план (Том Лейн)

    Типичным проявлением этого дефекта были ошибки «в плане не должно быть обращения к переменной вложенного плана».

  • Исправление оценки избирательности соединения по внешнему ключу для полусоединений и антисоединений, а также в ситуациях с наследованием (Том Лейн)

    Новый код, принимающий в рассмотрение связь по внешнему ключу, работал неправильно в этих случаях, и оценки оказывались хуже, а не лучше, чем в коде до 9.6.

  • Исправление pg_dump, чтобы в выгрузку попадали данные последовательности, помеченной как конфигурационная таблица расширения (Микаэль Пакье)

  • Корректировка неправильной обработки ALTER DEFAULT PRIVILEGES ... REVOKE в pg_dump (Стивен Фрост)

    Программа pg_dump не выдавала требуемые команды REVOKE в случаях, когда с помощью ALTER DEFAULT PRIVILEGES некоторые права доступа исключались из начального набора.

  • Исправление pg_dump для корректной выгрузки пользовательских приведений и преобразований, использующих встроенные функции (Стивен Фрост)

  • Реализация более разумного поведения pg_restore с --create --if-exists в случаях, когда архив содержит нераспознанные команды DROP (Том Лейн)

    Это не устраняет никакую наблюдаемую ошибку, но может улучшить поведение в будущем, при использовании pg_restore с архивом, созданным предыдущей версией pg_dump.

  • Исправление ограничения нагрузки pg_basebackup при низкой скорости ввода/вывода (Антонин Хоуска)

    Если скорость диска на время оказывалась ниже заданного ограничения, в вычислении происходило переполнение, и в результате ограничение отключалось до конца операции.

  • Обеспечение корректной работы pg_basebackup с подкаталогами pg_stat_tmp и pg_replslot, являющимися символическими ссылками (Магнус Хагандер, Микаэль Пакье)

  • Предотвращение возможного сбоя pg_basebackup на резервном сервере при задействовании файлов WAL (Амит Капила, Роберт Хаас)

  • Усовершенствование initdb, чтобы в postgresql.conf вставлялись корректные для текущей платформы значения по умолчанию параметров xxx_flush_after (Фабьен Коэльо, Том Лейн)

    Это позволило описать значения по умолчанию в документации более понятно, чем раньше.

  • Исправление возможного дефекта при обработке развёрнутых массивов в ограничениях-проверках доменов и в конструкциях CASE (Том Лейн)

    Существовала вероятность, что функция PL/pgSQL, вызванная в этих контекстах, изменит или даже удалит значение массива, которое должно сохраняться для дополнительных операций.

  • Исправление рекурсивного вызова функций PL/pgSQL в таких контекстах, как проверки ограничений домена, выполняемые при присвоении значения переменной PL/pgSQL (Том Лейн)

  • Обеспечение правильного учёта объектов исключений Python, создаваемых нами для PL/Python, счётчиками использования (Рафа де ла Торре, Том Лейн)

    Это предотвращает ошибки, возникавшие при использовании объектов после цикла уборки мусора в Python.

  • Исправление в PL/Tcl поддержки триггеров для таблиц, в которых имеется столбец .tupno (Том Лейн)

    Это соответствует (ранее недокументированному) поведению команд PL/Tcl spi_exec и spi_execp, в том, что особый столбец .tupno добавляется, только если отсутствует настоящий с таким именем.

  • В файлах ~/.pgpass должны допускаться завершения строк в стиле DOS, даже на Unix-платформах (Вик Фиринг)

    Это изменение упрощает использование одних и тех же файлов паролей на машинах с Unix и Windows.

  • Устранение выхода на один байт за границу буфера, когда ecpg передаётся имя файла, которое заканчивается точкой (Такаюки Цунакава)

  • Исправление некорректных сообщений об ошибках при дублировании данных в psql \crosstabview (Том Лейн)

    psql иногда цитировал некорректное содержимое строки/столбца, выдавая сообщение о множественных значениях в одной ячейке перекрёстной таблицы.

  • Исправление в psql дополнения табуляцией для команды ALTER DEFAULT PRIVILEGES (Жиль Даролд, Стивен Фрост)

  • Исправление в psql дополнения табуляцией для ALTER TABLE t ALTER c DROP ... (Кётаро Хоригути)

  • В psql пустое или содержащее только пробелы значение переменной окружения PAGER должно означать «без постраничника» (Том Лейн)

    Ранее с таким значением вывод, предназначенный для постраничника, просто исчезал.

  • Улучшение в contrib/dblink передачи сообщений о низкоуровневых ошибках libpq, например, о нехватке памяти (Джо Конвей)

  • Реализация contrib/dblink должна игнорировать невоспринимаемые ей параметры сервера, когда в качестве источника параметров подключения используется сторонний сервер contrib/postgres_fdw (Кори Хинкер)

    Ранее, если объект стороннего сервера имел параметры, которые не относились к параметрам подключения libpq, происходила ошибка.

  • Исправление проблем с переносимостью в функциях contrib/pageinspect, связанных с индексами GIN (Питер Эйзентраут, Том Лейн)

  • Устранение возможной потери событий чтения сокета при ожидании в Windows (Амит Капила)

    Эта ошибка была безвредной при обычном использовании, но, как оказалось, она приводила к повисаниям при попытке воспользоваться расширением pldebugger.

  • В Windows изменённые переменные окружения должны передаваться и отладочным DLL (Кристина Ульрих)

  • Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией tzcode2016j (Том Лейн)

    Это решило ряд проблем; в частности, проблему при установке данных о часовых поясах в каталог, в котором не поддерживаются жёсткие ссылки.

  • Обновление данных часовых поясов до версии tzdata 2016j, включающее изменения правил перехода на летнее время на Северном Кипре (добавление нового пояса Asia/Famagusta), в России (добавление нового пояса Europe/Saratov), в Тонга и в Антарктике/Кейси, плюс корректировку исторических данных для Италии, Казахстана, Мальты и Палестины. Переход к предпочитаемому числовому обозначению пояса для Тонга.