E.47. Выпуск 11.8

Дата выпуска: 2020-05-14

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

E.47.1. Миграция на версию 11.8

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

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

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

  • Распространение действия ALTER TABLE ... SET STORAGE на индексы (Питер Эйзентраут)

    Для столбцов в индексах (кроме индексов по выражениям) при создании индекса всегда копировалось свойство attstorage из столбца в таблице. Теперь это свойство для согласованности будет меняться для них при выполнении команды ALTER TABLE ... SET STORAGE.

  • Сохранение свойства indisclustered у индексов, перезаписываемых командой ALTER TABLE (Амит Ланготе, Джастин Призби)

    Ранее команда ALTER TABLE теряла информацию о том, для какого индекса выполнялась команда CLUSTER.

  • Сохранение свойства идентификации реплики у индексов, перезаписываемых командой ALTER TABLE (Цюань Цзунлян, Питер Эйзентраут)

  • Блокирование объектов на более ранней стадии выполнения DROP OWNED BY (Альваро Эррера)

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

  • Исправление обработки ошибок при выполнении CREATE ROLE ... IN ROLE (Эндрю Гирт)

    В некоторых случаях при ошибке вместо надлежащего сообщения выдавалось «unexpected node type» (неожиданный тип узла) или что-то подобное.

  • Удаление из таблицы, отсоединяемой от секционированной родительской таблицы, всех триггеров, ранее скопированных в неё из последней (Джастин Призби)

  • Проверка совпадения семантики уникальных индексов в секционированных таблицах с семантикой равенства для ключа секционирования (Гуаньчэн Ло)

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

  • Предоставление всем членам роли pg_read_all_stats доступа ко всем статистическим представлениям, согласно ожиданиям (Магнус Хагандер)

    Нижележащие функции представлений pg_stat_progress_* ранее не считали эту роль имеющей соответствующие полномочия.

  • Устранение падения производительности при обращении к представлению information_schema.triggers (Том Лейн)

    В результате исправления представление было переопределено так, чтобы внешнее предложение WHERE, ограничивающее имя таблицы, могло передаваться ниже, благодаря чему все вычисления теперь могут производиться только для триггеров, относящихся к избранных таблицам, а не для вообще всех триггеров в базе. В базе, где создано множество триггеров, это изменение позволяет значительно ускорить запросы к этому представлению. До 11 версии этого падения производительности не наблюдалось, поэтому можно считать это нововведённым дефектом. Если для кого-то это является серьёзной проблемой, её можно устранить, заменив определение представления (или, возможно, просто удалив и пересоздав всю схему information_schema).

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

    Запросы вида !(foo<->bar) не могли найти нужные строки, когда применялся поиск по индексу GiST или GIN.

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

  • Улучшение выбора выдержек из документа в функции ts_headline() при обработке фразовых запросов (Том Лейн)

  • Устранение ошибок в обработке gin_fuzzy_search_limit (Аде Хэйуорд, Том Лейн)

    При небольшом значении gin_fuzzy_search_limit выполнение запросов могло неожиданно замедляться из-за непреднамеренного многократного сканирования одной и той же страницы индекса. В другом месте кода желаемая фильтрация не применялась вовсе, в результате чего могло возвращаться слишком много значений.

  • Добавление в набор форматов, допустимых для типа circle, формата «(x,y),r», который должен приниматься согласно документации (Дэвид Чжан)

  • Доработка функций get_bit() и set_bit() для поддержки строк bytea длиннее 256 МБ (Мувад Ли)

    Так как аргумент, задающий номер бита, имеет тип int4, с помощью этих функций нельзя обращаться к битам за пределами первых 256 мегабайт значения bytea. В 13 версии тип аргумента будет расширен до int8, а тем временем в текущей версии обеспечена поддержка этими функциями больших значений bytea в обозначенном пределе.

  • Игнорирование ошибок «файл не найден» в pg_ls_waldir() и родственных функциях (Том Лейн)

    Это устраняет сбой в условиях гонки, когда файл удаляется между моментом, когда мы получили запись о нём в каталоге, и моментом, когда мы пытаемся получить дополнительную информацию о нём, вызывая stat().

  • Устранение возможной утечки открытого дескриптора каталога в pg_ls_dir(), pg_timezone_names(), pg_tablespace_databases() и родственных функциях (Джастин Призби)

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

  • Ликвидация потери хеш-таблиц в подплане с хешированием при многократном выполнении подплана (Андреас Карлссон, Том Лейн)

    При достаточно большом количестве повторений такого подплана объём потерянной памяти мог оказаться весьма заметным.

  • Устранение возможности сбоя при прерывании команды REINDEX сигналом завершения сеанса (Том Лейн)

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

  • Предотвращение отображения мусорных данных при выводе статистики таблицы соединения по хешу в EXPLAIN (Константин Книжник, Том Лейн, Томас Манро)

  • Исправление расчёта длительности этапов в процедуре усечения кучи при выполнении VACUUM VERBOSE (Тацухито Касахара)

  • Устранение потенциальной недооценки числа удалённых страниц индексов-B-деревьев в выводе VACUUM VERBOSE (Питер Гейган)

  • Исправление обработки старейшей удалённой страницы в индексе-B-дереве (Питер Гейган)

    В результате ошибки могли приниматься неправильные решения о пропуске очистки индекса при выполнении VACUUM, хотя по всей видимости для пользователей этот дефект никак не проявлялся.

  • Обеспечение передачи состояний ожидания TimelineHistoryRead и TimelineHistoryWrite во всех местах в коде, где читаются и записываются файлы истории линий времени (Масахиро Икеда)

  • Предотвращение повторного добавления «waiting» (ожидание) в заголовок процесса, выводимый PS (Масахико Савада)

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

    Сбой был возможен только в случае удаления временной схемы суперпользователем, что практикуется нечасто, но всё же должно обрабатываться корректно.

  • Предотвращение преждевременного перерабатывания сегментов WAL во время восстановления после сбоя (Жеан-Гийом де Рорте)

    Сегменты WAL, которые становились готовыми к архивации в ходе процедуры восстановления, могли перерабатываться, не попадая в архив.

  • Отказ от сканирования неактуальных линий времени в ходе восстановления архива (Кётаро Хоригути)

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

  • Удаление ненужной проверки, сигнализирующей об ошибке «subtransaction logged without previous top-level txn record» (записи подтранзакции в журнале не предшествует запись транзакции верхнего уровня) (Арсений Шер, Амит Капила)

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

  • Обеспечение снятия блокировки io_in_progress_lock для слота репликации при обработке нештатных ситуаций (Паван Деоласи)

    Ранее блокировка снималась не всегда, вследствие чего процесс walsender мог зависнуть в ожидании.

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

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

  • Недопущение изменения nextXid в обратном направлении на ведомом сервере (Ека Паламадай)

    В результате условия гонки сервер горячего резерва мог передавать ведущему серверу некорректные ответные сообщения, вследствие чего на ведущем операция VACUUM могла выполняться раньше времени.

  • Добавление значений SQLSTATE в формируемые отчёты об ошибках в нескольких местах (Масахико Савада)

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

  • Устранение утечки памяти в libpq при использовании режима sslmode=verify-full (Роман Пешкуров)

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

  • Обработка в ecpg аргумента «-» как означающего «читать с stdin» на всех платформах (Том Лейн)

  • Добавление дополнения табуляцией имени файла для команды psql \gx (Вик Фиринг)

  • Добавление в pg_dump поддержки конструкции ALTER ... DEPENDS ON EXTENSION (Альваро Эррера)

    Ранее программа pg_dump игнорировала зависимости, добавленные таким образом, вследствие чего они терялись после выгрузки/восстановления или выполнения pg_upgrade.

  • Исправление в pg_dump выгрузки комментариев к объектам политики RLS (Том Лейн)

  • Перенос в выгрузке pg_dump восстановления событийных триггеров на финальный этап (Фабрицио де Ройес Мелло, Хамид Ахтар, Том Лейн)

    Это снижает риск нежелательного влияния событийных триггеров на восстановление других объектов.

  • Исключение подкаталогов табличных пространств, относящихся к другим версиям PostgreSQL, из проверки pg_verify_checksums (Михаэль Банк, Бернд Хелмле)

    Такие подкаталоги на самом деле не имеют отношения к текущему кластеру баз данных, поэтому их проверять не следует.

  • Исключение временных копий pg_internal.init из проверки утилиты pg_verify_checksums и связанных программ (Микаэль Пакье)

  • Исправление обработки кавычек в значениях параметров --encoding, --lc-ctype и --lc-collate утилиты createdb (Микаэль Пакье)

  • Устранение краха при попытке вызвать функцию lo_manage() из contrib/lo как обычную функцию, а не в качестве триггера (Том Лейн)

  • Защита от переполнения полей длины в типах ltree и lquery модуля contrib/ltree (Никита Глухов)

  • Реализация обходного решения проблемы в функции bt_metap() модуля contrib/pageinspect, возникавшей со значением oldest_xact, превышающим 2^31-1 (Питер Гейган)

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

  • Устранение утечки ссылки на кеш в contrib/sepgsql (Майкл Ло)

  • Исправление обработки имён локалей в стиле Unix на платформе Windows (Хуан Хосе Сантамария Флеча)

  • Использование pkg-config для определения расположения libxml2 в процедуре configure (Хью Макмастер, Том Лейн, Питер Эйзентраут)

    Если утилита pkg-config отсутствует или не имеет информации о libxml2, мы будем использовать xml2-config, как и прежде.

    Это изменение может нарушить процедуры сборки PostgreSQL, в которых для использования нестандартной версии libxml2 путь к нужной версии xml2-config добавляется в PATH. Теперь вместо этого нужно указать путь к нужному xml2-config в переменной окружения XML2_CONFIG. Этот метод будет работать и с новыми, и со старыми версиями PostgreSQL.

  • Исправление в сборках MSVC манипуляции с путём к Python с учётом того, что он может содержать пробелы (Виктор Вагнер)

  • Исправление в сборках MSVC определения версии Visual Studio во избежание зависимости от языковых настроек (Эндрю Дунстан)

  • Использование в сборках MSVC ключа -Wno-deprecated с bison версии новее 3.0, как уже делается в сборках для отличных от Windows ОС (Эндрю Дунстан)

  • Обновление данных часовых поясов до версии tzdata 2020a, включающее изменение правил перехода на летнее время в Марокко и канадском Юконе, а также корректировку исторических данных для Шанхая.

    Часовой пояс America/Godthab был переименован в America/Nuuk в соответствии с принятым сейчас названием; старое обозначение сохранено для совместимости в виде ссылки.

    Также был актуализирован список известных initdb часовых поясов в Windows, так что теперь параметры системного часового пояса на этой платформе будут восприняты корректно с большей вероятностью.