E.2. Postgres Pro Enterprise 16.10.1 #
Дата выпуска: 2025-09-30
E.2.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=задаётся точная позиция в WAL (LSN[,TLI]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 команды
bihactlinit. Теперь можно включать и отключать нестрогую синхронную репликацию, а также изменять её настройки в любое время с помощью функции 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
NNNNdoes not exist» (отношение с OIDNNNNне существует).Устранена проблема с выделением памяти в 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. Добавлена новая функциональность:
Расширение 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 её потерянной части.
Расширение plpgsql_check обновлено до версии 2.8.2 для всех операционных систем, за исключением AlterOS 7.5 и SLES 12, которые продолжают использовать предыдущую версию.
Устранена проблема в модуле 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.2.2. Миграция на версию 16.10.1 #
Если вы производите обновление выпуска Postgres Pro Enterprise, базирующегося на той же основной версии PostgreSQL, достаточно просто установить новый выпуск в текущий каталог инсталляции.
Важно
Чтобы обновить BiHA-кластер с Postgres Pro Enterprise версии 16.9 или ниже до Postgres Pro Enterprise версии 16.10, обратитесь к инструкциям по миграции BiHA.
Чтобы обновить расширение citus с версии 12.1 до версии 13.0, обратитесь к инструкциям по обновлению.
Версия 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.