E.9. Выпуск 12.14
Дата выпуска: 2023-02-09
В этот выпуск вошли различные исправления, внесённые после версии 12.13. За информацией о нововведениях версии 12 обратитесь к Разделу E.23.
E.9.1. Миграция на версию 12.14
Если используется версия 12.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 12.10, см. также Раздел E.13.
E.9.2. Изменения
Устранение утечки содержимого памяти после сбоя инициализации шифрования трафика GSSAPI в библиотеке libpq (Джейкоб Чемпион) §
Модифицированный сервер или неаутентифицированный посредник мог отправить во время настройки шифрования трафика GSSAPI (Kerberos) сообщение об ошибке без завершающего нулевого байта. Затем libpq копировал эту строку, а также все последующие байты в памяти приложения вплоть до следующего нулевого байта в свой отчёт об ошибке. В зависимости от того, как вызывающее приложение использовало отчёт об ошибке, содержимое памяти приложения могло быть раскрыто. Также существовала небольшая вероятность сбоя из-за чтения за пределами памяти. Теперь сообщение сервера верно завершается нулевым байтом. (CVE-2022-41862)
Возможность назначения пометки
REPLICA IDENTITY
нерабочему (пока) индексу (Том Лейн) §Когда программа pg_dump выгружает секционированный индекс с пометкой
REPLICA IDENTITY
, создаётся последовательность команд, в которойREPLICA IDENTITY
применяется до того, как секционированный индекс помечается рабочим, что приводит к сбою восстановления. Кажется, нет веской причины запрещать такой порядок действий, так что данная возможность допускается.REPLICA IDENTITY
в любом случае не будет действовать, пока индекс не будет рабочим.Исправление обработки маркеров
DEFAULT
в правилах, выполняющихINSERT
из многострочного спискаVALUES
(Дин Рашид) §В некоторых случаях маркер
DEFAULT
не заменялся правильным выражением со стандартным значением, что приводило к ошибке «unrecognized node type» (нераспознанный тип узла).Запрет использования неопределённых переменных в проверках существования
jsonpath
(Александр Коротков, Дэвид Дж. Джонстон) §В то время как операторы сопоставления
jsonpath
выдавали ошибку при обнаружении неопределённой переменной в шаблоне пути, операторы существования рассматривали её как соответствующую.Устранение повреждения данных в особых случаях при параллельных соединениях по хешу (Дмитрий Астапов)
Если последний фрагмент большого кортежа, записываемого во временный файл, составлял ровно 32760 байт, он повреждался из-за ошибки неучтённой единицы. После этого запрос обычно завершался сбоем с признаками повреждения данных.
Учёт нестандартных значений
checkpoint_completion_target
(Бхарат Рупиредди) §После изменения
checkpoint_completion_target
внутреннее состояние не обновлялось, что могло привести к тому, что ввод-вывод при создании контрольной точки выполнялся быстрее или медленнее, чем хотелось бы, особенно если этот параметр изменялся на лету.Запись в журнал правильной отметки времени окончания при восстановлении до
recovery_target_xid
(Том Лейн) §При завершении восстановления до
recovery_target_xid
приrecovery_target_inclusive
=off
в сообщение журнала записывалась неверная отметка времени (всегда 2000-01-01) «recovery stopping before ... transaction» (остановка восстановления перед транзакцией ...).Предотвращение ошибки «wrong tuple length» (неверная длина кортежа) в конце выполнения команды
VACUUM
(Ашвин Агравал, Цзюньфэн Ян) §Эта ошибка возникала, если команда
VACUUM
должна была изменить значениеdatfrozenxid
для текущей базы данных, а в базе было так много предоставленных прав, что значениеdatacl
требовало отдельного хранения.Недопущение немедленной фиксации после выполнения команды
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 сообщал об использовании недостаточно выровненного указателя. Это вряд ли могло вызывать проблемы не в отладочных сборках, но было исправлено в целях тестирования.
Удаление ошибочного утверждения в логике оптимизации ненужных результирующих RTE (Том Лейн) §
Исправление ошибок копирования и вставки в сообщениях об ошибках поиска в кеше для проверок ACL (Джастин Призби) §
В принципе эти ошибки никогда не должны были возникать. Но если это происходило, то некоторые из них сообщали неверный тип объекта.
Исключение вызова небезопасных серверных функций в pg_dump до установления блокировки для проверяемых таблиц (Том Лейн, Жиль Даролд) § §
Программа pg_dump использовала определённые серверные функции, которые могли вызывать сбой при проверке таблицы, удаляемой в этот момент. Сбои такого типа были устранены путём гарантированной установки блокировки
ACCESS SHARE
до выяснения свойств таблицы, а также исключением применения таких функций к таблицам, которые не будут выгружаться.Исправление дополнения табуляцией команды
ALTER FUNCTION/PROCEDURE/ROUTINE
...SET SCHEMA
(Дин Рашид) §Исправление ошибочного утверждения истинности в
contrib/postgres_fdw
(Эцуро Фудзита) §Исправление ошибки, из-за которой модуль
contrib/seg
вызывал сбой или выводил мусор, если вводилось число, содержащее более 127 цифр (Том Лейн) §Устранение предупреждений в модуле
contrib/sepgsql
о том, что устарела версия libselinux (Микаэль Пакье) §Исправление сборки на Microsoft Visual Studio 2013 (Том Лейн) §
В предыдущем патче предполагалось, что на всех нужных платформах есть функция
snprintf()
, но на MSVC 2013 её пока нет. На этой платформе следует использовать функциюsprintf()
.Устранение ошибки компиляции при сборке 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.