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=
задаётся точная позиция в 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 команды
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» (отношение с 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 её потерянной части.
Устранена проблема в модуле 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, достаточно просто установить новый выпуск в текущий каталог инсталляции.
Важно
Чтобы обновить 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.