E.1. Postgres Pro Enterprise 15.10.1

Дата выпуска: 2024-12-09

E.1.1. Обзор

Этот выпуск основан на PostgreSQL 15.10 и Postgres Pro Enterprise 15.8.2. Все изменения, унаследованные от PostgreSQL 15.10, описаны в Замечаниях к выпуску PostgreSQL 15.10. По сравнению с Postgres Pro Enterprise 15.8.2 эта версия также содержит следующие изменения:

  • Добавлена возможность вместо Append формировать операцию MergeAppend, которая позволяет исключить дополнительную сортировку, необходимую для гарантии сортировки данных. Теперь MergeAppend формируется с указанием столбцов для сортировки. Новая возможность применяется только в том случае, если параметр enable_appendorpath имеет значение ON.

  • Улучшена производительность CFS за счёт сокращения количества сообщений об аннулировании для таблиц, которые ранее вызывали множество событий повторного открытия файлов. Теперь аннулирование нацелено на конкретные сегменты, с которыми работает сборщик мусора.

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

  • Добавлена возможность преобразования связанных подзапросов IN в соединения.

  • Реализована возможность выгружать состояние отдельного обслуживающего процесса путём отправки сигнала выгрузки.

  • Добавлен шаг для проверки программой pg_upgrade ненулевых значений в неиспользуемых полях заголовков файлов *.cfm.

  • Изменён уровень ошибки для расчёта статистики по прерываниям очистки только на уровень ERROR (PGERROR). Расчёт прерываний очистки для уровня ошибок PANIC мог приводить к непредсказуемому поведению системы, а статистика в любом случае не могла быть рассчитана из-за сбоя сервера.

  • Исправлено поведение функции cfs_gc_relation для возврата фактического количества обработанных сегментов отношения.

  • Исправлена проблема, возникавшая при обновлении PostgreSQL или Postgres Pro Standard до Postgres Pro Enterprise с использованием pg_upgrade при переполнении счётчика смещения мультитранзакций.

  • Исправлена обработка 64-битных идентификаторов транзакций для корректного кодирования и декодирования идентификаторов транзакций.

  • Устранена проблема с обновлением PostgreSQL или Postgres Pro Standard до Postgres Pro Enterprise с помощью pg_upgrade, которая могла возникнуть при попытке преобразовать страницы кучи в формат страницы double xmax в случаях, когда для размещения специальной области было недостаточно свободного места. При наличии мультитранзакций это могло привести к ошибкам вида «MultiXactId XXXXX has not been created yet» (идентификатор XXXXX мультитранзакции ещё не создан) или «could not access status of transaction XXXXXX» (не удалось получить доступ к статусу транзакции XXXXXX), в зависимости от версии сервера. При этом не должно происходить потери данных, поскольку не происходит фактического преобразования. Теперь страницы безопасно преобразуются при первом обращении.

  • Устранена утечка памяти, которая могла возникнуть, если в выводе команды EXPLAIN было более 64 столбцов.

  • Устранена ошибка сегментации, которая могла возникнуть при выполнении команды COPY TO при использовании модуля online_analyze.

  • Устранена проблема, из-за которой команда EXPLAIN ANALYZE отображала неверное количество вставленных и конфликтующих кортежей во время вставки строк с конфликтующими первичными ключами при использовании ON CONFLICT DO NOTHING.

  • Устранена проблема, которая могла замедлить выполнение запроса. Причина заключалась выборе неоптимального индекса оптимизатором из-за отсутствия оценки его стоимости после удаления избыточных предложений с включённым (значение ON) параметром enable_appendorpath.

  • Устранена проблема с разбором имён подготовленных операторов в случаях, когда имя оператора содержало имя команды SQL, а также удалён ставший ненужным параметр sr_plan.max_consts_len.

  • Добавлена поддержка архитектуры ARM для РЕД ОС МУРОМ 8.

  • Удалена поддержка загрузки устаревших данных, ранее необходимая для чтения устаревших двоичных планов sr_plan и преобразования их в формат JSON. Сохранена минимальная функциональность для обнаружения устаревших файлов, их резервного копирования и записи сообщения об этом в журнал.

  • Обновлён модуль aqo. Включены следующие исправления и усовершенствования:

    • Улучшен поиск соседей в aqo (aqo.wide_search = on) для одновременного использования данных от нескольких соседей. Также пересмотрено взаимодействие поиска с aqo.min_neighbors_for_predicting, чтобы допустить поиск соседей для запросов, у которых число образцов данных меньше заданного в параметре значения. Ранее такие запросы не учитывались.

    • Исправлена ошибка выхода за пределы массива в логике обновления «умного» тайм-аута операторов aqo, а также проблема с некорректной записью статистики в aqo_query_stats при переполнении массивов. В предыдущих версиях использование aqo_query_stat_update с массивами величиной 20 и более могло привести к записи последующих изменений статистики в неконтролируемые сегменты памяти. Обязательно установите Postgres Pro как на ведущем, так и на ведомом сервере, чтобы избежать подобных проблем с повреждением памяти.

  • Приложение mamonsu обновлено до версии 3.5.9, в которой улучшена производительность и исправлены некоторые ошибки. Основные изменения перечислены ниже:

    • Добавлена поддержка систем, в которых установлена версия setuptools выше 67.7.2.

    • Прекращено использование указания user:group с точками на этапе перед установкой RPM.

  • Расширение multimaster обновлено до версии 1.2.0. Значительно увеличена производительность синхронизации за счёт включения асинхронных операций фиксации на отстающем узле, который синхронизируется с узлом-донором. Использование таких операций можно включить с помощью параметра multimaster.enable_async_3pc_on_catchup.

  • Драйвер ODBC обновлён до версии 17.00.0002.

  • Расширение oracle_fdw обновлено до версии 2.7.0.

  • Модуль orafce обновлён до версии 4.13.5.

  • Расширение pg_filedump обновлено до версии 17.1, в которой была устранена проблема, приводившая к ошибке сегментации при обработке неполных страниц и сбою pg_filedump.

  • Расширение pg_hint_plan обновлено до версии 1.5.2.

  • Утилита pg_integrity_check обновлена для отображения фактических значений контрольной суммы только с параметром --verbose, если контрольные суммы различаются.

  • Расширение pg_portal_modify обновлено до версии 0.3.4.

  • Обновлено расширение pg_proaudit. Включены следующие исправления и усовершенствования:

    • Добавлена регистрация событий безопасности, связанных с операциями с профилями: CREATE PROFILE, ALTER PROFILE и DROP PROFILE.

    • Изменено распределение событий безопасности, связанных с функциями и хранимыми процедурами, по группам событий безопасности: группа ALL_DDL теперь не включает события, связанные с функциями и хранимыми процедурами, ALL_PROC включает CREATE, ALTER и DROP, а ALL_DML включает EXECUTE.

    • Исправлена совместимость с пулом соединений. Ранее могли возникнуть проблемы при регистрации событий безопасности AUTHENTICATE и DISCONNECT.

    • Исправлена регистрация расширением pg_proaudit событий безопасности для секционированных таблиц. Теперь события SELECT/UPDATE/INSERT/DELETE/TRUNCATE в секционированной таблице регистрируются, если правила регистрации подразумевают регистрацию соответствующих событий для этой таблицы. Ранее регистрировались только события для отдельных секций.

  • Приложение pg_probackup обновлено до версии 2.8.5 Enterprise, в которой улучшена производительность и исправлены некоторые ошибки:

    • Добавлена возможность вывода команды version в формате JSON с помощью --format=json.

    • Добавлен параметр --all для команды amcheck, который позволяет выполнить все проверки в одной команде.

    • Добавлена поддержка параметра include в файле конфигурации. Содержимое файла, указанного в include, добавляется в файл конфигурации вместо этого параметра.

    • Добавлена возможность указывать конкретное количество потоков для выполнения резервного копирования и его последующей проверки, указав их в параметрах --backup-threads и --validate-threads соответственно.

    • Изменён приоритет значений PGDATA и BACKUP_PATH. Теперь приоритет имеют значения из параметров командной строки.

    • Добавлена проверка файлов WAL для резервных копий, объединяемых командой merge.

    • Сообщение об ошибке, которое выдавалось, когда команда validate, запущенная с параметром --wal, обнаруживала архив в состоянии DEGRADED, было заменено предупреждением, поскольку резервные копии в этом состоянии не влияют на корректность восстановления в целом.

    • Добавлена поддержка параметра --s3-config-file для restore_command. Файл postgresql.auto.conf должен включать restore_command с параметром --s3-config-file, если резервная копия была создана с этим параметром.

    • Для PG_PROBACKUP_S3_IGNORE_CERT_VER установлено значение по умолчанию on согласно документации.

    • Устранена проблема, которая могла возникнуть при слишком длинной командной строке.

    • Устранена ошибка, которая могла возникнуть во время проверки или восстановления, если использовался механизм PITR из предыдущей линии времени.

    • Исправлена проблема, которая могла возникнуть, когда порт подключения S3 был указан как в PG_PROBACKUP_S3_PORT, так и в PG_PROBACKUP_S3_HOST. Теперь значение, указанное в PG_PROBACKUP_S3_HOST, вместе с адресом имеет более высокий приоритет.

  • Утилита pgpro_controldata обновлена до версии 17.1.0.

  • Расширение pgpro_stats обновлено до версии 1.8, в которой добавлена поддержка Postgres Pro 17. Основные изменения перечислены ниже:

    • Обновлены представления pgpro_stats_statements и pgpro_stats_totals, чтобы включить новые поля, добавленные в модуль pg_stat_statements. Также были обновлены соответствующие функции.

    • Упрощён доступ к представлениям и функциям. В частности, всем пользователям был предоставлен доступ к представлениям pgpro_stats_archiver, pgpro_stats_vacuum_database, pgpro_stats_vacuum_tables и pgpro_stats_vacuum_indexes. Ранее для этих представлений требовалось явное предоставление прав доступа. Доступ к выполнению функции pgpro_stats_trace_reset, которая ранее могла быть выполнена любым пользователем, теперь ограничен суперпользователями.

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

    • Устранена избыточная проверка удержания блокировки при доступе к хеш-таблице фильтров трассировки сеансов.

    • Исправлена обработка параметра конфигурации pgpro_stats.stats_temp_directory. Ранее после перезапуска сервера, необходимого для вступления в силу изменений значения этого параметра, могла возникнуть фатальная ошибка «pfree called with invalid pointer» (неверный указатель для функции pfree).

    • Устранена проблема, которая могла возникнуть во время трассировки сеанса и вызвать ошибки «could not write file ""pg_stat/pgpro_stats_filters.trace.tmp"": No such file or directory» (не удалось записать файл ""pg_stat/pgpro_stats_filters.trace.tmp"": Такого файла или каталога не существует). Параллельная запись из разных сеансов в файл трассировки теперь работает корректно, и процессы могут выполнять запись в файл трассировки параллельно без конфликтов.

  • Модуль pgpro_pwr обновлён до версии 4.7, в которой улучшена производительность и добавлены новые возможности. Основные изменения перечислены ниже:

    • Механизм промежуточных выборок для сбора относительно быстро меняющихся данных.

    • Новые таблицы отчётов, в частности касающиеся состояний сеансов.

    • Поддержка новых статистик Postgres Pro 17.

    • Возможность не сбрасывать статистику расширения по сбору статистики при получении выборки.

    • Изменение тип поля, отслеживающего идентификаторы транзакций в определённой таблице, с xid на text. Использование типа xid ранее могло привести к сбою pg_upgrade при обновлении с Postgres Pro Standard до Postgres Pro Enterprise.

  • Приложение pgpro_scheduler обновлено до версии 2.10, в которую были включены следующие изменения:

    • Исправлена проблема с автоматическим перезапуском разовых заданий после их прерывания.

    • Исправлено поведение функции schedule.get_active_jobs для корректного вывода списка выполняющихся заданий cron.

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

    • Устранена ошибка, из-за которой работа at job executor завершалась сбоем, если database manager преждевременно освобождал сегмент общей памяти до того, как к нему подключался рабочий процесс.

    • Устранена проблема, из-за которой функция schedule.timetable не выводила следующее время выполнения заданий cron ни с next_time_statement, ни с массивом дат. Устранена проблема с расчётом следующего времени выполнения для заданий cron, из-за которой экземпляры заданий пропускались.

    • Устранена проблема, приводившая к сбоям баз данных из-за ошибок сегментации в фоновом рабочем процессе исполнителя заданий.

  • Модуль pg_repack обновлён до версии 1.5.1.

  • Расширение pg_wait_sampling обновлено для отслеживания идентификаторов подзапросов и операторов утилит. Также был добавлен параметр pg_wait_sampling.sample_cpu, который позволяет указать режим обработки показаний, определяющий, следует ли выполнять обработку показаний процессов, использующих ЦП.

  • Модуль pljava обновлён до версии 1.6.8.

  • Расширение PLV8 обновлено до версии 3.2.3.

  • Обеспечена совместимость postgres_fdw с автономными транзакциями.

  • Расширение PTRACK обновлено для предотвращения возможных проблем с резервными копиями PTRACK путём автоматического удаления файла ptrack.map при отключении PTRACK.

  • Расширение tds_fdw обновлено до версии 2.0.4.

E.1.2. Миграция на версию 15.10.1

Если вы производите обновление выпуска Postgres Pro Enterprise, базирующегося на той же основной версии PostgreSQL, достаточно просто установить новый выпуск в текущий каталог инсталляции.

Версия ABI может измениться в корректирующем выпуске Postgres Pro. В таком случае при попытке запустить расширение возникает ошибка ABI mismatch (Несоответствие ABI), поэтому обязательно установите новую версию расширения, поставляемую с новым выпуском Postgres Pro, или перекомпилируйте стороннее расширение, чтобы использовать его с текущей версией Postgres Pro.

Если вы создаёте резервные копии с помощью pg_probackup и ранее обновили его до версии 2.8.0 Enterprise или 2.8.1 Enterprise, обязательно обновите его до версии 2.8.2 Enterprise или выше и сделайте полную резервную копию базы данных после обновления, поскольку резервные копии, созданные с использованием этих версий, могут быть повреждены. Чтобы проверить, повреждены ли резервные копии, созданные с помощью версий 2.8.0 или 2.8.1, можно использовать версию 2.8.2.

Начиная с Postgres Pro Enterprise 15.5.1, права ролей с атрибутом CREATEROLE ограничены, и для изменения свойств других ролей требуется наличие права ADMIN OPTION.

Настоятельно не рекомендуется обновлять кластер с 32-битными идентификаторами транзакций на версии Postgres Pro Enterprise ниже 15.4.2 при наличии мультитранзакций в базе данных, поскольку это может вызвать повреждение данных.

При обновлении до версии Postgres Pro Enterprise 15.3.1 и выше обязательно обновите pg_probackup Enterprise до версии 2.6.4 или выше, поскольку более ранние версии pg_probackup несовместимы с этими версиями Postgres Pro Enterprise.

Для перехода с PostgreSQL, а также с выпуска Postgres Pro Standard или Postgres Pro Enterprise, базирующегося на предыдущей основной версии PostgreSQL, обратитесь к инструкциям по миграции на версию 15.