E.29. Релиз 15.1#

E.29. Релиз 15.1

E.29. Релиз 15.1

Дата релиза:  2022-11-10

Этот релиз содержит ряд исправлений версии 15.0. Для получения информации о новых функциях в основном релизе 15 см. Раздел E.30.

E.29.1. Миграция на версию 15.1

Не требуется резервное копирование/восстановление для тех, кто использует версию 15.X.

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

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

  • Исправлена ошибка удаления не первых сегментов больших таблиц (Tom Lane) §

    PostgreSQL разбивает большие таблицы на несколько файлов (обычно по 1 ГБ на файл). Логика удаления таблицы была некорректна и не удаляла все файлы, кроме первого, в двух случаях: при удалении временных таблиц и воспроизведении журнала WAL при удалении обычных таблиц. Приложения, которые регулярно создают многогигабайтные временные таблицы, могут столкнуться с значительным утечкой дискового пространства.

    Временные файлы временных таблиц удаляются при запуске постмастера, поэтому достаточно просто обновиться до версии 15.1, чтобы избавиться от утечки временного хранилища. Однако, если вы столкнулись с сбоями базы данных при использовании версии 15.0 и возможно были удалены большие таблицы непосредственно перед такими сбоями, рекомендуется проверить каталоги базы данных на наличие файлов с именами, соответствующими шаблону NNNN.NN. Если нет соответствующего файла с именем только NNNN (без суффикса .NN), эти файлы следует удалить вручную.

  • Исправлена обработка токенов DEFAULT, которые появляются в многострочном выражении VALUES в INSERT на обновляемом представлении (Tom Lane) §

    Этот недочет мог привести к ошибкам "cache lookup failed for type" или даже к сбоям в старых версиях.

  • Запрещены правила с именем _RETURN, которые не являются ON SELECT (Tom Lane) §

    Это позволяет избежать путаницы между правилом ON SELECT представления и любыми другими правилами, которые оно может иметь.

  • Избегать сбоя в EXPLAIN VERBOSE для запроса, использующего SEARCH BREADTH FIRST с постоянными начальными значениями (Tom Lane) §

  • Предотвращено использование MERGE на секционированной таблице с секциями-иностранными таблицами (Álvaro Herrera) §

    Регистр не поддерживается и ранее вызывал непонятную ошибку.

  • Исправлено построение внешних ключей для каждого раздела при выполнении ALTER TABLE ATTACH PARTITION (Жан-Гийом де Рортэ, Álvaro Herrera) § §

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

  • Исправлена ошибка планировщика с расширенной статистикой на секционированных или унаследованных таблицах (Ричард Гуо, Джастин Призби) §

    Некоторые случаи завершились с ошибкой cache lookup failed for statistics object.

  • Исправлено неправильное упорядочение операций WAL в пути быстрой вставки для индексов GIN (Маттиас ван де Меент, Чжан Минли) §

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

  • Исправлены ошибки в логическом декодировании, когда воспроизведение начинается с точки между началом транзакции и началом её подтранзакции (Masahiko Sawada, Kuroda Hayato) § §

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

  • Принимать прерывания в большем количестве мест во время логического декодирования (Амит Капила, Масахико Савада) § §

    Это решает проблемы с медленным завершением рабочих процессов репликации.

  • Предотвращены попытки репликации в секцию внешней таблицы в рабочих процессах репликации (Ши Ю, Том Лейн) §

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

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

    Если произошла ошибка синтаксиса в команде CREATE FUNCTION или DO на языке SQL или PL/pgSQL, выполненной в рабочем процессе логической репликации, рабочий процесс завершится с ошибкой нулевого указателя или сбоем утверждения.

  • Избегался двойной вызов функции обратного вызова завершения работы модуля архиватора (Натан Боссарт, Бхарат Рупиредди) §

  • Добавлена проверка во время планирования на попытку доступа к таблице, у которой нет метода доступа к таблице (Tom Lane) §

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

  • Предотвращено аварийное завершение работы postmaster при повреждении состояния общей памяти (Tom Lane) §

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

  • В libpq режим одиночной строки корректно обрабатывался при конвейерной обработке (Денис Лаксальд) §

    Флаг одиночной строки не сбрасывался в правильное время, если также был активен режим конвейера.

  • Исправлен статус выхода psql при отмене запроса командной строки (Петер Айзентраут) §

    psql -c query успешно завершится, если запрос будет отменен. Исправьте его, чтобы завершался с ненулевым статусом, как в других случаях ошибок.

  • Разрешено кросс-платформенное перемещение таблиц в pg_basebackup (Роберт Хаас) §

    Разрешить удаленный путь в --tablespace-mapping быть как абсолютным путем в стиле Unix, так и в стиле Windows, так как исходный сервер может находиться на другой операционной системе, чем локальная система.

  • Исправлена ошибка pg_dump, из-за которой не удавалось выгрузить комментарии, прикрепленные к некоторым ограничениям CHECK (Tom Lane) §

  • Исправлено CREATE DATABASE, чтобы позволить его параметру oid превышать 231 (Tom Lane) §

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

  • В pg_stat_statements исправлен доступ к уже освобожденной памяти (zhaoqigui) §

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

  • Исправлены несовместимости с LLVM 15 (Томас Мунро, Андрес Фройнд) §

  • Разрешено использование __sync_lock_test_and_set() для спинлоков на любой машине (Tom Lane) §

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

  • Символ REF был переименован в REF_P, чтобы избежать ошибки компиляции на последних версиях macOS (Tom Lane) §

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

  • Обновлены файлы данных часовых поясов до версии tzdata 2022f для изменений закона о летнем времени в Чили, Фиджи, Иране, Иордании, Мексике, Палестине и Сирии, а также для исторических исправлений для Чили, Крыма, Ирана и Мексики. (Том Лейн) §

    Также, зона Europe/Kiev переименована в Europe/Kyiv. Также, следующие зоны были объединены с соседними, более населенными зонами, где время совпадало с 1970 года: Antarctica/Vostok, Asia/Brunei, Asia/Kuala_Lumpur, Atlantic/Reykjavik, Europe/Amsterdam, Europe/Copenhagen, Europe/Luxembourg, Europe/Monaco, Europe/Oslo, Europe/Stockholm, Indian/Christmas, Indian/Cocos, Indian/Kerguelen, Indian/Mahe, Indian/Reunion, Pacific/Chuuk, Pacific/Funafuti, Pacific/Majuro, Pacific/Pohnpei, Pacific/Wake и Pacific/Wallis. (Это косвенно затрагивает зоны, которые уже были ссылками на одну из этих зон: Arctic/Longyearbyen, Atlantic/Jan_Mayen, Iceland, Pacific/Ponape, Pacific/Truk и Pacific/Yap). America/Nipigon, America/Rainy_River, America/Thunder_Bay, Europe/Uzhgorod и Europe/Zaporozhye также были объединены с соседними зонами после того, как было обнаружено, что заявленные различия от соседних зон после 1970 года были ошибочными. Во всех этих случаях предыдущее название зоны сохранены в качестве псевдонима; но фактически данные относятся к зоне, с которой зоны были объединены.

    Эти объединения зон приводят к потере истории часовых поясов до 1970 года для объединенных зон, что может вызывать проблемы для приложений, требующих согласованности отображения типа timestamptz. Например, сохраненное значение 1944-06-01 12:00 UTC ранее отображалось как 1944-06-01 13:00:00+01, если выбрана зона Europe/Stockholm, но теперь оно будет отображаться как 1944-06-01 14:00:00+02.

    Возможно собрать файлы данных часовых поясов с опциями, которые восстановят старые данные поясов, но при этом вставится много других старых (и обычно плохо подтвержденных) данных поясов, что приведет к большему количеству общих изменений из предыдущей версии, по сравнению с текущими изменениями. PostgreSQL выдает данные tzdb как рекомендуется, и насколько нам известно, большинство основных дистрибутивов операционных систем делают то же самое. Однако, если эти изменения вызывают значительные проблемы для вашего приложения, возможным решением является установка локальной сборки файлов данных часовых поясов с использованием обратной совместимости опций tzdb (см. их опции PACKRATDATA и PACKRATLIST).