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, так что теперь параметры системного часового пояса на этой платформе будут восприняты корректно с большей вероятностью.