E.1. Postgres Pro Enterprise 16.10.1 #

Дата выпуска: 2025-09-30

E.1.1. Обзор #

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

  • Добавлен параметр конфигурации num_xloginsert_locks, который задаёт количество блокировок вставки при одновременной записи в журнал предзаписи (WAL). Параметр используется для повышения эффективности записи в WAL.

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

  • Добавлена возможность для оптимизатора применять мемоизацию узлов для параметризованных соединений ANTI JOIN, если для параметра enable_extra_transformations установлено значение on.

  • Реализованы следующие исправления и усовершенствования для перепланирования запросов в реальном времени:

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

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

  • Улучшена производительность за счёт замены циклических блокировок, ранее используемых для общей очереди сообщений аннулирования, более эффективным примитивом синхронизации. Это позволило устранить узкое место в производительности. Может быть полезно для 1C.

  • Улучшена производительность за счёт подавления сообщений аннулирования кеша каталога в ходе операций DDL на временных таблицах и в процессе анализа этих таблиц. Полезно для 1C.

  • Улучшена производительность за счёт того, что файл pg_internal.init не аннулируется при анализе таблиц каталога, особенно когда статистика для этих таблиц часто меняется. Может быть полезно для 1C.

  • Улучшена производительность за счёт уменьшения количества запросов на блокировку таблиц pg_attribute и pg_statistic при выполнении запросов с большим количеством отношений, которые отсутствуют в кеше системы. Может быть полезно в некоторых вариантах использования для 1C.

  • Улучшена производительность нетранзакционных операций усечения временных таблиц и операций быстрого усечения. Полезно для 1C.

  • Улучшена производительность за счёт пропуска блокировки индексов временных таблиц. Включить блокировку можно с помощью параметра skip_temp_rel_lock. Полезно для 1C.

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

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

  • Обновлены CREATE DATABASE, createdb и initdb. Теперь если значение lc_collate по умолчанию используется для icu_locale или --icu-locale, выводится информационное сообщение.

  • Оптимизировано поведение при работе с функцией COALESCE. Теперь функция заменяется одним аргументом, если остальные аргументы оказываются null. Это позволяет улучшить оценку избирательности для условий запросов и создавать более эффективные планы выполнения запросов.

  • Добавлены следующие изменения в реализацию crash_info:

    • Добавлены параметры конфигурации crash_info_timer, crash_info_timer_interval и crash_info_query_threshold, которые позволяют профилировать длительные запросы в выходных файлах crash_info.

    • Расширена диагностическая информация, которую параметр конфигурации crash_info_dump позволяет записать в случае сбоя сервера. По умолчанию теперь поддерживается запись общей информации об ошибке (сигнале), а для Linux x64 также дамп информации о состоянии процессора и байтов рядом с RIP (return instruction pointer, указатель возврата инструкции). Всё это обеспечивает лучшую диагностику, в частности, для сигналов SIGILL (недопустимая инструкция). Также был изменён способ дампа стека в случае сбоев для Linux x64. Кроме того, memory_context удалён из списка источников дампа по умолчанию, чтобы избежать сбоев, которые могут возникнуть при записи диагностической информации.

  • Реализованы следующие исправления и усовершенствования для CFS:

    • Улучшены операции со сжатыми табличными пространствами на архитектурах s390/s390x.

    • Улучшена оценка коэффициента сжатия таблиц с помощью функции cfs_estimate(relation). Обратите внимание, что функцию cfs_estimate(relation) следует использовать только после контрольной точки, чтобы избежать некорректных оценок.

    • Отключено усечение для сжатых отношений в ходе операций очистки.

    • Прекращена поддержка шифрования для CFS, включая параметр конфигурации cfs_encryption.

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

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

  • Устранено несоответствие образов страниц при добавлении кучи на пустую страницу. Ранее это могло привести к некорректному содержимому страниц на резервных серверах.

  • Устранена проблема с преобразованием страниц из 32-битного в 64-битный формат после обновления Postgres Pro Enterprise с помощью pg_upgrade. Ранее, когда страница преобразовывалась только в памяти без записи на диск и одновременно автоочисткой удалялись соответствующие сегменты pg_xact, статус транзакции в кортежах терялся, что приводило к ошибкам доступа.

  • Устранено возможное условие гонки в процессе walreceiver.

  • Устранена проблема при обработке очереди LISTEN/NOTIFY, из-за которой нельзя было получить статус транзакции. Ранее процедура VACUUM FREEZE могла увеличить значение datfrozenxid слишком сильно.

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

  • Устранена утечка памяти, вызванная реализацией параметра конфигурации enable_temp_memory_catalog.

  • Устранены проблемы репликации, вызванные некорректным сдвигом горизонта WAL. Ранее если заморозка транзакции вызывалась не командой VACUUM, а в ходе вычисления базы страницы для 64-битных идентификаторов транзакций, в WAL записывалось некорректное значение горизонта. Это могло привести к аннулированию слотов логической репликации или задержке репликации на резервных серверах.

  • Добавлена поддержка ОС Debian 13, Red Hat Enterprise Linux 10, Rocky Linux 10, Oracle Linux 10 и AlmaLinux 10.

  • Прекращена поддержка ОС Ubuntu 20.04.

  • Добавлено расширение wal2json для логического декодирования, которое преобразует изменения базы данных из журнала предзаписи (WAL) в формат JSON.

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

    • Для поддержки запросов, которые используют временные таблицы вместе с постоянными таблицами, в представление aqo_data добавлено поле tmpoids и в функцию aqo_data_update добавлен параметр tmpoids.

    • Устранено условие гонки при вызове функции aqo_cleanup из разных сеансов.

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

    • Исправлена проблема, из-за которой на резервном сервере мог возникать сбой с сигналом SIGABRT, если версия aqo на таком сервере отличалась от версии модуля на ведущем.

  • Модуль auto_explain обновлён. В выводе время планирования запроса вынесено в отдельную строку под деревом планировщика, как это сделано в выводе EXPLAIN. Ранее pgbadger не мог распознать информацию о запросе и поэтому не включал её в отчёт.

  • Решение BiHA обновлено до версии 1.6, в которой добавлена новая функциональность, улучшена производительность и исправлены некоторые ошибки:

    • Реализована возможность использовать SSL-сертификаты для аутентификации пользователей. За дополнительной информацией о настройке SSL-аутентификации и других доступных методах аутентификации обратитесь к разделу Настройка аутентификации пользователей.

    • Реализована функция-обработчик STATUS_CHANGED, которая вызывается на каждом узле, когда значения в полях представления biha.status_v (за исключением поля since_last_hb) меняются.

    • Реализован набор функций для управления кворумной синхронной репликацией в BiHA-кластере: biha.add_to_ssn, biha.get_ssn, biha.remove_from_ssn и biha.set_ssn. За дополнительной информацией обратитесь к разделу Управление репликацией.

    • Реализована возможность при необходимости принудительно запускать процесс pg_rewind в BiHA-кластере, например, для частичного восстановления баз данных, экстренного восстановления после неудачной стандартной синхронизации или восстановления определённых диапазонов WAL. Чтобы выполнить принудительный запуск pg_rewind, установите значения для параметров --force и --start. Параметр --force переопределяет результаты проверки безопасности, если она не пройдена, чтобы разрешить выполнение pg_rewind. В параметре --start=LSN[,TLI] задаётся точная позиция в WAL (LSN) и необязательный идентификатор линии времени (TLI). Если идентификатор не указан, по умолчанию берётся текущая линия времени целевого узла. Если описанные выше параметры заданы, pg_rewind воспроизводит WAL, используя вместо последней общей контрольной точки контрольную точку, предшествующую заданной позиции в WAL.

    • Реализована функциональность выравнивания WAL, которая помогает избежать запуска pg_rewind для синхронизации узлов кластера в тех случаях, когда расхождение WAL вызвано только лишними записями сообщений о контроле состояния. Алгоритм выравнивания WAL находит последнюю общую точку в журналах WAL отклонившегося узла и нового лидера, проверяет, что все последующие записи содержат только сообщения о контроле состояния, и автоматически удаляет эти лишние записи с отклонившегося узла, чтобы он мог продолжить репликацию. Функциональность управляется с помощью параметра конфигурации biha.autowaltrim. За дополнительной информацией обратитесь к разделу Автоматическая синхронизация кластера после аварийного переключения.

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

    • Улучшен механизм управления нестрогой синхронной репликацией в BiHA-кластере. Ранее, чтобы смягчить ограничения синхронной репликации, при инициализации кластера нужно было задать параметр --sync-standbys-min команды bihactl init. Теперь можно включать и отключать нестрогую синхронную репликацию, а также изменять её настройки в любое время с помощью функции biha.set_sync_standbys_min. Параметр biha.sync_standbys_min удалён как избыточный.

    • Исправлена ошибка, из-за которой при указании в параметре biha.port значения больше или равного 32768 происходило зацикливание сервера.

  • Расширение citus обновлено до версии 12.1.8.1, и обеспечена совместимость с версией 13.0.4.1.

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

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

    • Улучшена способность узла возвращаться к обычной работе после навёрстывания за счёт ускорения процесса построения фильтра транзакции при запуске walreceiver.

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

    • Исправлены неожиданные ошибки при выполнении команд DDL, которые были вызваны некорректной обработкой сообщений аннулирования кеша каталога.

  • Реализована возможность настраивать LDAP-аутентификацию для pgbouncer с помощью PAM (Pluggable Authentication Modules, подключаемые модули аутентификации). За дополнительной информацией обратитесь к разделу Настройка LDAP-аутентификации для pgbouncer.

  • Обновлён модуль pg_freespacemap. Теперь он включает функцию pg_freespace_relation_logical_blocks для вычисления пространства на диске, которое используется слоями отношений. Это функция работает со сжатыми и несжатыми таблицами.

  • Расширение pg_pathman обновлено. Устранена проблема с доступом к секциям, которая могла приводить к тому, что команды, повторно использующие один и тот же план запроса, например, в PL/pgSQL, завершались с ошибками, такими как «relation with OID NNNN does not exist» (отношение с OID NNNN не существует).

  • Устранена проблема с выделением памяти в pg_prewarm, из-за которой ранее могли возникать ошибки типа «invalid memory alloc request size» (недопустимый запрошенный размер памяти), если для параметра конфигурации shared_buffers было задано огромное значение.

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

    • Добавлена поддержка формата CEF для файлов журналов событий.

    • Скорректирован вывод pg_proaudit. Теперь поля xid и vxid не отображаются, если имеют нулевое значение.

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

    • Для команды add-instance добавлен параметр --wal-tree, который позволяет хранить заархивированные файлы WAL в древовидной структуре. Это повышает производительность операций при работе с журналами большого объёма.

    • В вывод команды show добавлено поле postgres-edition в формате JSON для отображения информации о редакции СУБД.

    • Улучшена работа с параметром --dry-run при восстановлении табличных пространств. Оценка операции и вывод плана стали более точными.

    • Устранена проблема, связанная с вычислением окна хранения. Значение времени теперь берётся с компьютера, на котором работает pg_probackup. Окно хранения вычисляется правильно, даже если серверы расположены в разных часовых поясах.

    • Устранена проблема, связанная с работой команды archive-get. Теперь каталог pbk_prefetch создаётся с правильными правами доступа, которые наследуются из PGDATA.

    • Устранён ложный сбой команды checkdb, возникавший в удалённом режиме при параллельных операциях TRUNCATE или удалении таблиц на резервных узлах.

  • Исправлены следующие проблемы в модуле pgpro_bindump:

    • Устранён риск сбоя pg_probackup3, если в ходе проверки резервных копий с использованием модуля pgpro_bindump в режиме PRO встречались временные таблицы.

    • Устранена утечка памяти в pg_probackup3 при использовании модуля pgpro_bindump для операций PTRACK.

    • Устранена проблема, которая может привести к зацикливанию в pg_probackup3 при использовании модуля pgpro_bindump.

    • Устранена проблема с резервным копированием в нескольких линиях времени в режиме PTRACK в pg_probackup3 при использовании модуля pgpro_bindump в режиме PRO.

  • Обновлена утилита pgpro_datactl. Добавлена новая функциональность:

    • Добавлена команда repack, которая позволяет изменять алгоритм сжатия и/или уровень сжатия файлов CFS.

    • Добавлена команда ground, которая заменяет повреждённые блоки нулями, чтобы избежать возможных сбоев.

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

  • Расширение pgpro_multiplan обновлено до версии 1.3, в которую включены следующие исправления, изменения и усовершенствования:

    • Добавлен новый параметр pgpro_multiplan.aqe_mode, который позволяет включать или выключать функциональность, связанную с перепланированием запросов в режиме реального времени.

    • Для поля plan_type представления pgpro_multiplan_storage добавлено значение baseline, которое позволяет определить разрешённые планы.

    • Переименованы следующие сущности:

      • Представление pgpro_multiplan_fs_counter переименовано в pgpro_multiplan_stats.

      • Поле usage_numb представления pgpro_multiplan_stats переименовано в counter.

      • Функция pgpro_multiplan_fs_counter() переименована в pgpro_multiplan_stats().

      • Параметр конфигурации pgpro_multiplan.fs_ctr_max переименован в pgpro_multiplan.max_stats.

    • Обновлена функция set_aqe_trigger. Теперь при указании индивидуальных значений триггеров перепланирования в строке запроса функция принимает текст. Параметризованная версия текста запроса отображается в представлении aqe_triggers.

    • Изменено поведение по умолчанию для сбора статистики. Теперь статистические данные не собираются до тех пор, пока эта функциональность не включена с помощью параметра pgpro_multiplan.mode.

    • Изменено поведение по умолчанию функции set_aqe_trigger(). Теперь функция работает, только если в параметре pgpro_multiplan.aqe_mode включены значения индивидуальных триггеров перепланирования.

    • Удалён параметр pgpro_multiplan.enable, в котором больше нет необходимости. Вместо него теперь используется параметр pgpro_multiplan.mode.

    • Удалены параметры pgpro_multiplan.aqe_plans_auto_approve и pgpro_multiplan.aqe_collect_stats. Вместо них используется параметр pgpro_multiplan.aqe_mode.

    • В представление pgpro_multiplan_storage добавлено поле sample_string, которое позволяет сохранять непараметризованный запрос, на основании которого план был заморожен или добавлен в набор разрешённых планов.

    • В представления pgpro_multiplan_captured_queries и pgpro_multiplan_stats добавлено поле planid. Это поле содержит идентификатор плана, совместимый с расширением pgpro_stats, и позволяет получить расширенную статистику, объединяя информацию из представлений pgpro_multiplan_stats и pgpro_stats_statements.

    • Добавлена функция pgpro_multiplan_remove_baseline, которая удаляет указанный план из набора разрешённых планов.

    • Исправлена ошибка, из-за которой расширение pgpro_multiplan не регистрировало запросы с записью INTERVAL 'const'.

    • Устранена проблема, из-за которой при добавлении планов запросов с пользовательскими указаниями в набор разрешённых (базовых) планов не рассчитывался plan_hash. Теперь такие планы можно добавить в набор базовых планов с правильными значениями plan_hash.

    • Исправлена ошибка сегментации, которая возникала при попытках обратиться к представлению aqe_triggers или вызвать функцию aqe_triggers_reset с отключённым расширением pgpro_multiplan. Теперь вся функциональность, связанная с триггерами перепланирования запросов в реальном времени, остаётся доступной независимо от значения параметра pgpro_multiplan.mode.

  • Модуль pgpro_pwr обновлён до версии 4.10, в которой полностью изменён дизайн отчётов и добавлена поддержка PostgreSQL 18.

  • Расширение pgpro_result_cache обновлено до версии 1.1, в которую были включены следующие изменения:

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

    • Добавлены новые параметры конфигурации, которые будут полезны для отладки.

  • Расширение pgpro_rp обновлено до версии 1.4, в которую были добавлены представления pgpro_rp_stat_sleep_view и pgpro_rp_session_plans. В этих представлениях отображаются время простоя работающего обслуживающего процесса из-за приоритизации ресурсов и планы для всех активных сеансов, соответственно.

  • Расширение pgpro_scheduler обновлено до версии 2.12, в которую включены следующие усовершенствования и исправления:

    • Добавлены функции schedule.clean_at_jobs_done и schedule.clean_at_jobs_done, с помощью которых можно очистить таблицу schedule.at_jobs_done, удалив старые записи.

    • Добавлена возможность менять время следующего запуска задания cron с next_time_statement путём обновления его свойств cron, date, dates или rule с помощью функции set_job_attributes().

  • Обновлено расширение pgpro_sfile. Добавлены серверные функции sf_import и sf_export для импорта и экспорта объектов sfile, соответственно, а также их аналоги, выполняемые на стороне клиента.

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

    • Реализована возможность отслеживать команды утилиты по query_id, как в pg_stat_statements. Ранее команды утилиты отслеживались путём строгого сравнения по текстовым строкам запросов и поэтому не могли быть нормализованы корректно.

    • Исправлена ошибка сегментации, которая могла возникать при определении дополнительных метрик. Ошибка была вызвана проблемой при выделении памяти.

  • Устранена проблема, из-за которой при использовании пресета 1c.tune утилиты pgpro_tune задавались неверные значения параметров конфигурации.

  • Модуль pg_query_state обновлён до версии 1.2, в которую добавлены функции pg_progress_bar и pg_progress_bar_visual, позволяющие отслеживать текущий прогресс выполнения запросов.

  • В утилиту pg_restore добавлен параметр --enable-large-mem-buffers, позволяющий не суперпользователю восстановить базу данных, которая не содержит больших значений bytea и записей с несколькими значениями типа text.

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

  • Устранена проблема в модуле postgres_fdw, из-за которой запросы UPDATE и DELETE с предложением RETURNING могли выдавать ошибки «out of memory for query result» (недостаточно памяти для результата запроса). Теперь результаты RETURNING обрабатываются построчно.

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

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

    • Устранён бесконечный цикл сканирования индекса при использовании нескольких предложений ORDER BY.

  • Исправлена ошибка уровня PANIC в sr_plan, которая могла возникать, если на резервном сервере была установлена версия sr_plan, отличающаяся от версии расширения на ведущем сервере.

  • Расширение utl_http обновлено до версии 2.0, в которую включены следующие усовершенствования и исправления:

    • Добавлена поддержка TLS и MD5.

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

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

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

Важно

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

При обновлении отказоустойчивого кластера с Postgres Pro Enterprise версии 16.3.x или ниже сначала отключите автоматическое аварийное переключение узлов, если оно было включено, и обновите все резервные серверы, затем обновите ведущий сервер, повысьте резервный сервер до ведущего и перезапустите бывший ведущий сервер (возможно, с использованием pg_rewind).

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

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