E.36. Выпуск 11.19
Дата выпуска: 2023-02-09
В этот выпуск вошли различные исправления, внесённые после версии 11.18. За информацией о нововведениях версии 11 обратитесь к Разделу E.55.
Сообщество PostgreSQL прекратит выпуск обновлений для версии 11.X в ноябре 2023 г. Поэтому пользователям не следует медлить с переходом на более новую основную версию.
E.36.1. Миграция на версию 11.19
Если используется версия 11.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 11.14, см. также Раздел E.41.
E.36.2. Изменения
Возможность назначения пометки
REPLICA IDENTITY
нерабочему (пока) индексу (Том Лейн)Когда программа pg_dump выгружает секционированный индекс с пометкой
REPLICA IDENTITY
, создаётся последовательность команд, в которойREPLICA IDENTITY
применяется до того, как секционированный индекс помечается рабочим, что приводит к сбою восстановления. Кажется, нет веской причины запрещать такой порядок действий, так что данная возможность допускается.REPLICA IDENTITY
в любом случае не будет действовать, пока индекс не будет рабочим.Исправление обработки маркеров
DEFAULT
в правилах, выполняющихINSERT
из многострочного спискаVALUES
(Дин Рашид)В некоторых случаях маркер
DEFAULT
не заменялся правильным выражением со стандартным значением, что приводило к ошибке «unrecognized node type» (нераспознанный тип узла).Устранение повреждения данных в особых случаях при параллельных соединениях по хешу (Дмитрий Астапов)
Если последний фрагмент большого кортежа, записываемого во временный файл, составлял ровно 32760 байт, он повреждался из-за ошибки неучтённой единицы. После этого запрос обычно завершался сбоем с признаками повреждения данных.
Учёт нестандартных значений
checkpoint_completion_target
(Бхарат Рупиредди)После изменения
checkpoint_completion_target
внутреннее состояние не обновлялось, что могло привести к тому, что ввод-вывод при создании контрольной точки выполнялся быстрее или медленнее, чем хотелось бы, особенно если этот параметр изменялся на лету.Запись в журнал правильной отметки времени окончания при восстановлении до
recovery_target_xid
(Том Лейн)При завершении восстановления до
recovery_target_xid
приrecovery_target_inclusive
=off
в сообщение журнала записывалась неверная отметка времени (всегда 2000-01-01) «recovery stopping before ... transaction» (остановка восстановления перед транзакцией ...).Недопущение немедленной фиксации после выполнения команды
ANALYZE
в расширенном протоколе запросов, если используется конвейерный режим (Том Лейн)Если не было явной команды
BEGIN TRANSACTION
, командаANALYZE
выполняла фиксацию, чего не должно происходить при выполнении команд в конвейере.Отклонение пакетов запроса на отмену, имеющих неправильную длину (Андрей Бородин)
Сервер обрабатывал запрос на отмену, даже если значение в слове длины было недостаточным. Это приводило к чтению за пределами выделенного буфера. Теоретически это может вызывать критический сбой, но на практике это маловероятно, так как буфер должен быть очень близок к краю блока памяти. Более вероятным результатом стало бы ложное сообщение в журнале о неправильном PID процесса или коде отмены. Теперь вместо этого выводится ошибка о неправильной длине.
Добавление защиты от рекурсии и зацикливания при «подтягивании» подзапросов (Том Лейн)
Слишком сложный запрос может вызвать глубокую рекурсию и чрезмерно долгое упрощение подзапросов. Переносить корректное исправление в старые версии было бы слишком накладно, поэтому просто добавлены проверки глубины стека и проверка прерывания, чтобы разрешить отмену запроса.
Исправление кода соединений с учётом секционирования для ситуаций, когда невозможно создать план для каждой секции (Том Лейн)
Раньше могли возникать ошибки вида «could not devise a query plan for the given query» (не удалось выработать план для данного запроса).
Ограничение объёма работ по очистке, выполняемых функцией
get_actual_variable_range
(Саймон Риггс)Когда планировщик запускается сразу после удаления большого количества кортежей в конце индекса, требуется значительный объём работ по установке бита соответствующего признака для этих записей индекса. Теперь объём работ, выполняемых в любом запросе, ограничивается проверкой 100 страниц кучи. Вся очистка в конечном итоге все равно произойдёт, но без значительного падения производительности.
Обеспечение возможности отмены выполнения запросов полнотекстового поиска во время проверки соответствия фраз (Том Лейн)
Очистка объекта подключения libpq после неудачной попытки подключения для репликации (Андрес Фройнд)
В предыдущей реализации кода возникала утечка объекта подключения. В коде фоновых процессов это вряд ли могло привести к негативным последствиям, потому что вызывающий процесс прекращал попытки и завершался. Но в таких командах, как
CREATE SUBSCRIPTION
, устранённый дефект приводил к небольшой утечке памяти во время существования сеанса.Уменьшение на серверах горячего резерва количества операций по поиску транзакций, активных на ведущем сервере (Саймон Риггс, Михаил Николаев)
Недостаточно агрессивная очистка массива KnownAssignedXids могла приводить к снижению производительности, особенно если для параметра
max_connections
установлено большое значение на резервном сервере.Исправление использования неинициализированной памяти при логическом декодировании (Масахико Савада)
В некоторых случаях при возобновлении логического декодирования производились попытки повторного использования уже освобождённых данных транзакций, что приводило к непредсказуемому поведению.
Предотвращение редкой ошибки критического уровня «failed to acquire cleanup lock» (не удалось получить блокировку для очистки) во время воспроизведения из WAL операций разделения страницы хеш-индекса (Роберт Хаас)
Увеличение LSN страницы кучи при установке бита полной видимости во время воспроизведения WAL (Джефф Дэвис)
Без увеличения LSN страница на резервных серверах могла отличаться от страницы на ведущем, а также не происходили ожидаемые изменения LSN. Для PostgreSQL это вряд ли могло представлять опасность, но работа сторонних инструментов могла нарушиться.
Предотвращение небезопасного использования указателя
rd_smgr
элемента кеша отношений (Амул Сул)Из кода удалены все предположения о том, что
rd_smgr
остаётся рабочим на протяжении серии операций; теперь его использование ограничивается функцией, которая при необходимости вычисляет его заново. Это исправление устраняет ошибки, возникавшие при неожиданной очистке кеша во время выполнения такой серии операций.Устранение скрытой проблемы переполнения буфера в логике
WaitEventSet
(Томас Манро)Реализации на основе
epoll
иkqueue
могли запрашивать у ядра слишком много событий, если размер их внутреннего буфера отличался от размера выходного буфера вызывающей программы. Сообщения о такой проблеме в выпущенных версиях PostgreSQL не поступали, но эта ошибка представляет опасность для внешних модулей и будущих исправлений ошибок.Исключение номинально неопределённого поведения при доступе к общей памяти в 32-разрядных сборках (Андрес Фройнд)
Санитайзер неопределённого поведения компилятора clang сообщал об использовании недостаточно выровненного указателя. Это вряд ли могло вызывать проблемы не в отладочных сборках, но было исправлено в целях тестирования.
Исправление ошибок копирования и вставки в сообщениях об ошибках поиска в кеше для проверок ACL (Джастин Призби)
В принципе эти ошибки никогда не должны были возникать. Но если это происходило, то некоторые из них сообщали неверный тип объекта.
Исключение вызова небезопасных серверных функций в pg_dump до установления блокировки для проверяемых таблиц (Том Лейн, Жиль Даролд)
Программа pg_dump использовала определённые серверные функции, которые могли вызывать сбой при проверке таблицы, удаляемой в этот момент. Сбои такого типа были устранены путём гарантированной установки блокировки
ACCESS SHARE
до выяснения свойств таблицы, а также исключением применения таких функций к таблицам, которые не будут выгружаться.Исправление дополнения табуляцией команды
ALTER FUNCTION/PROCEDURE/ROUTINE
...SET SCHEMA
(Дин Рашид)Исправление ошибки, из-за которой модуль
contrib/seg
вызывал сбой или выводил мусор, если вводилось число, содержащее более 127 цифр (Том Лейн)Устранение предупреждений в модуле
contrib/sepgsql
о том, что устарела версия libselinux (Микаэль Пакье)Устранение ошибки компиляции при сборке PL/Perl с MSVC с использованием Strawberry Perl (Эндрю Дунстан)
Устранение несоответствия сборки PL/Perl с MSVC библиотеке Perl, собранной с gcc (Эндрю Дунстан)
Такие комбинации ранее могли завершаться ошибкой «loadable library and perl binaries are mismatched» (несоответствие загружаемой библиотеки сборке perl).
Подавление предупреждений компилятора о конструкциях в заголовочных файлах Perl (Андрес Фройнд)
При использовании предпочтительных параметров компилятора выдаются предупреждения о конструкциях, появляющихся в последних версиях заголовочных файлов Perl. При использовании gcc эти предупреждения можно подавить с помощью указаний pragma.
Внесение исправлений в код pg_waldump, чтобы он собирался компиляторами, которые не отбрасывают неиспользуемые функции
static inline
(Том Лейн)Обновление данных часовых поясов до версии tzdata 2022g, включающее изменение правил перехода на летнее время в Гренландии и Мексике, а также корректировку исторических данных для северной Канады, Колумбии и Сингапура.
Кроме того, новый часовой пояс America/Ciudad_Juarez был отделён от America/Ojinaga.