E.1. Postgres Pro Enterprise 16.9.1 #

Дата выпуска: 2025-06-11

E.1.1. Обзор #

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

  • Добавлена экспериментальная функциональность, которая позволяет выполнять параллельные запросы к временным таблицам и включается при помощи нового параметра конфигурации enable_parallel_temptables. Эту функциональность пока не следует использовать в производственной среде. Также добавлен параметр конфигурации write_page_cost, который позволяет оценивать приблизительную стоимость сброса страниц временных таблиц на диск и работает только при включённом параметре enable_parallel_temptables.

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

  • Добавлена экспериментальная функциональность, которая позволяет использовать системный каталог в оперативной памяти для временных таблиц и включается при помощи нового параметра конфигурации enable_temp_memory_catalog. Эту функциональность пока не следует использовать в производственной среде.

  • Добавлена возможность для демона автоочистки обрабатывать индексы таблицы в параллельном режиме. Параметр хранения таблицы parallel_autovacuum_workers управляет тем, должна ли она обрабатываться в параллельном режиме, и определяет количество дополнительных параллельных процессов автоочистки, которые можно запустить для обработки таблицы. Количество процессов автоочистки в кластере, которые могут использоваться для параллельной обработки таблиц, ограничивается параметром конфигурации autovacuum_max_workers. В настоящее время функциональность параллельной автоочистки находится в экспериментальной фазе, предназначена только для целей тестирования, и её пока не следует использовать в производственной среде.

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

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

    • Спрятано сбивающее с толку сообщение «early terminated» (раннее прерывание) в EXPLAIN VERBOSE, которое теперь отображается только при включённом параметре replan_enable и активном перепланировании запросов.

    • Исправлена проблема, из-за которой при перепланировании запросов в реальном времени не удавалось оптимизировать запросы с подзапросами.

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

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

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

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

    • Добавлена обработка сигналов SIGILL в процесс обработки crash_info.

    • В выходные файлы crash_info добавлены новые сведения: время запуска процесса и текст запроса при планировании.

    • Исправлены некорректные имена функций в первых 2-3 строках трассировки стека crash_info.

    • Исправлено возможное усечение данных в конце файлов выгрузки SQL-запросов. Ранее переполнение буфера при выгрузке SQL-запроса могло приводить к тому, что записывались не все данные, в результате чего в конце файлов, создаваемых crash_info, могли содержаться усечённые данные.

    • Исправлена обработка сигналов о сбоях (отправленных командой kill) обслуживающими процессами. Ранее с первым сигналом информация crash_info отправлялась в журнал, но процесс продолжал работу без создания дампа памяти, даже если он был настроен. И только со вторым сигналом обслуживающий процесс завершался и создавался дамп памяти так, как ожидалось.

  • Ограничены действия, которые суперпользователи могут совершать с временными отношениями из других сеансов. Теперь с такими отношениями можно выполнять только команду DROP TABLE . Если для параметра конфигурации skip_temp_rel_lock установлено значение on, их запрещено даже удалять.

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

    • Обеспечена совместимость CFS с командами ALTER TABLESPACE ... SET/RESET.

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

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

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

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

    • Исправлена проблема, из-за которой столбец xact_start представления pg_stat_activity оказывался пустым для обслуживающих процессов, выполняющих автономные транзакции.

  • Исправлена проблема с недостающей статистикой об очистке при использовании нескольких рабочих процессов очистки индексов.

  • Исправлено некорректное использование циклических блокировок в процессе автоматического исправления страниц.

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

  • Добавлено расширение pg_failover_slots в виде отдельного пакета. Оно предназначено для автоматического создания и синхронизации слотов логической репликации на физических репликах.

  • Добавлено решение pg_probackup3 для резервного копирования и восстановления кластеров баз данных Postgres Pro. За подробной информацией обратитесь к Замечаниям к выпускам pg_probackup3.

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

  • Добавлена утилита pgpro_datactl для управления файлами данных Postgres Pro, которая включает в себя модуль распаковки и анализа файлов CFS.

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

  • Добавлена утилита pgpro_tune, которая позволяет устанавливать параметры конфигурации Postgres Pro автоматически.

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

    • Добавлена функция biha.set_sync_standbys, которая позволяет настроить кворумную синхронную репликацию в существующем асинхронном BiHA-кластере. Эту функцию можно также использовать для изменения количества кворумных синхронных ведомых узлов. За дополнительной информацией обратитесь к Настройка кворумной синхронной репликации в существующем BiHA-кластере.

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

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

    • Добавлен тип функции-обработчика LEADER_CHANGE_STARTED, которая вызывается на всех узлах, когда лидер недоступен и кворума хватает для начала выборов или когда лидер задаётся функцией biha.set_leader. Этот обработчик можно использовать для изолирования старого лидера. Более подробно новый обработчик описан в Типы обработчиков.

    • Добавлен параметр --referee-with-postgres-db команды bihactl add, который позволяет копировать базу данных postgres на узел-рефери. За дополнительной информацией обратитесь к База данных postgres на рефери.

    • Изменено поведение узлов, находящихся в состоянии NODE_ERROR, во время выборов. Теперь они не могут участвовать в голосовании.

    • Расширен список параметров кластера, возвращаемых функцией biha.config. Теперь она также возвращает столбец mode, который показывает режим работы узла: regular, referee или referee_with_wal.

    • Исправлена проблема с множеством сообщений «waiting for WAL to become available at...» (ожидание доступности WAL после следующего LSN:...) в журнале узла-рефери в режиме referee.

    • Устранена проблема, которая приводила к ошибке сегментации при вызове функций biha.set_* в BiHA-кластере с одним узлом (только лидером).

    • Исправлена проблема с уменьшением значения параметра max_wal_senders в BiHA-кластере с одним узлом (только лидером). За дополнительной информацией об уменьшении значений max_wal_senders и некоторых других параметров конфигурации Postgres Pro обратитесь к разделу Уменьшение значений параметров Postgres Pro.

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

    • Исправлена ошибка, из-за которой можно было указывать пустой пароль роли biha_replication_user при выполнении команды init.

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

    • Исправлена ошибка, которая приводила к непредвиденному поведению кластера, когда значение параметра конфигурации biha.sync_standbys_min задавалось функцией biha.set_sync_standbys_min за пределами допустимого диапазона. Теперь BiHA не позволяет изменять значение параметра biha.sync_standbys_min, если задаваемое значение выше количества кворумных синхронных узлов, указанного в параметре synchronous_standby_names.

  • Расширение citus обновлено до версии 12.1.7.1.

  • Расширение dbms_lob обновлено до версии 1.3, в которой исправлена некорректная обработка параметра amount функции write. Если значение параметра buffer длиннее, функция записывает ровно amount байтов (для BLOB) или символов (для CLOB).

  • Обновлён модуль pg_hint_plan. В новой версии игнорируются указания нового расширения pgpro_result_cache.

  • В initdb добавлена новая переменная окружения PGPRO_TUNE, которая указывает, нужно ли использовать утилиту pgpro_tune без изменения параметров в командной строке.

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

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

    • Исправлено потенциальное зависание узлов во время навёрстывания при попытке обработать прерванные DDL-транзакции в кластере с тремя или более узлами.

  • Модуль oracle_fdw обновлён. Увеличена длина строк вывода EXPLAIN для соответствия условиям фильтров некоторых запросов к каталогам Oracle. Новое значение — 3000 символов.

  • Исправлена проблема с обновлением модуля pageinspect. В редких случаях попытка обновления модуля командой ALTER EXTENSION pageinspect UPDATE TO после обновления кластера баз данных могла завершаться ошибкой. Это зависело от последовательности предыдущих обновлений. Чтобы избежать подобных проблем в будущем, настоятельно рекомендуется после обновления кластера БД удалить расширение командой DROP EXTENSION, а затем повторно создать его командой CREATE EXTENSION. Этот подход считается безопасным, поскольку pageinspect не создаёт зависимых объектов.

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

    • Добавлены новые типы объектов: CATALOG RELATION и CATALOG FUNCTION.

    • Добавлены новые поля событий: UUID, XID и VXID. Теперь можно определить событие по его UUID и идентификатору транзакции (если применимо).

    • Исправлено поведение параметра конфигурации pg_proaudit.log_catalog_access, теперь оно отражает новую логику регистрации событий для объектов системного каталога.

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

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

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

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

    • Исправлено поведение процесса logger при удалении роли из параллельного сеанса, настроенного в правиле регистрации событий.

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

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

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

    • Стабилизировано сохранение первоначальных прав доступа к каталогам при запуске команды init.

    • Стабилизирована работа команды checkdb на удалённом сервере.

    • Повышена стабильность восстановления с валидацией на момент времени (PITR).

    • Исправлена ошибка «SignatureDoesNotMatch» (несовпадение сигнатуры), которая могла возникать во время соединения с S3-хранилищем VK Cloud.

    • Исправлено некорректное поведение, которое могло наблюдаться при запуске ожидания потока передачи WAL в режиме доставки ARCHIVE.

  • Расширение pgpro_bfile обновлено до версии 1.3. В ней добавлена новая функция bfile_md5(), которая вычисляет MD5-хеш для указанного объекта bfile и возвращает результат в виде 16-байтного значения.

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

    • Добавлена функция set_aqe_trigger(), которая позволяет переопределять глобальные значения триггеров перепланирования в реальном времени для индивидуальных запросов. Все индивидуальные значения триггеров хранятся в новом представлении aqe_triggers. Новый параметр конфигурации pgpro_multiplan.aqe_max_items позволяет указывать максимальное количество элементов в этом представлении.

    • Добавлен параметр конфигурации pgpro_multiplan.aqe_collect_stats, который позволяет pgpro_multiplan собирать статистику для всех выражений, которые рассматриваются для переоптимизации при перепланировании запросов в реальном времени. Все статистические значения хранятся в новом представлении aqe_stats. Новый параметр pgpro_multiplan.aqe_max_stats позволяет указывать максимальное количество собираемых статистических значений.

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

    • Реализована возможность создавать резервные копии замороженных планов и затем восстанавливать эти планы в текущую базу данных при помощи функции pgpro_multiplan_restore(). Теперь замороженные планы можно перемещать между базами данных или даже экземплярами сервера.

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

    • Исправлена проблема, которая могла приводить к ошибкам вида «unrecognized node type» (нераспознанный тип узла) при работе с хранимыми процедурами и функциями.

    • Исправлено генерирование пустой строки указания в pgpro_multiplan, что вызывало ошибку синтаксиса pg_hint_plan.

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

    • Добавлена поддержка pgpro_stats 1.9.

    • Добавлена возможность определять режим сбора информации о размере отношений глобально при помощи параметра конфигурации pgpro_pwr.relsize_collect_mode расширения или для сервера при помощи функции set_server_size_sampling.

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

    • Добавлена возможность предварительного просмотра параметров хранения таблиц и индексов в разделе отчёта «Schema object statistics» (Статистика по объектам схемы).

  • Расширение pgpro_rp обновлено до версии 1.3, в которой устранены связанные сбои выгрузки/восстановления. Ранее при создании расширения pgpro_rp до восстановления выгрузки могло нарушаться ограничение уникальности во время восстановления pgpro_rp.

  • Расширение pgpro_scheduler обновлено до версии 2.11.2. В ней исправлена проблема, из-за которой могли дополнительно запускаться повторяющиеся задачи, если дни недели задавались в формате crontab. Теперь расширение проверяет все временные параметры задач и запускает их в указанное время.

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

    • Добавлен вариант функции sf_find, которая ищет объект sfile по идентификатору типа bigint, а также реализовано приведение типа bigint::sfile.

    • Исправлена проблема в pgpro_sfile, которая могла приводить к ошибкам вида «tuple concurrently updated» (кортеж изменён параллельно) во время выполнения операции DELETE или TRUNCATE.

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

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

    • Имена атрибутов фильтра explain_* трассировщика сеансов приведены в соответствие с именами параметров конфигурации трассировки сеансов.

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

    • Реализовано отключение функциональности трассировки сеансов, если не указаны соответствующие фильтры.

    • Запрещено одновременно указывать pgpro_stats и pg_stat_statements в shared_preload_libraries. Если они указаны вместе, сервер баз данных не запустится.

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

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

    • Исправлена проблема с некорректными показаниями, которая могла возникать из-за условий гонки при выключенном параметре конфигурации pg_wait_sampling.sample_cpu.

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

  • Удалён параметр --tune программы pg-setup. Вместо этого используйте новую утилиту pgpro_tune.

  • Экспериментальное расширение vops признано устаревшим.

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

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

Важно

Чтобы обновить BiHA-кластер с Postgres Pro Enterprise версии 16.8 и ниже до Postgres Pro Enterprise версии 16.9, см. инструкции по миграции BiHA.

Версия 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.