E.1. Postgres Pro Shardman 18.3.2 #

Дата выпуска: 2026-04-02

Это первый выпуск Postgres Pro Shardman 18. Он основан на Postgres Pro Shardman 17.9.2 и PostgreSQL 18.3 и включает все новые возможности, появившиеся в PostgreSQL 18, а также исправления ошибок, вошедшие в корректирующий выпуск PostgreSQL 18.3. Он также наследует часть возможностей Postgres Pro Enterprise 18.3.2. Подробное описание вы можете найти в разделах замечаний к выпуску PostgreSQL 18 и замечаний к выпуску PostgreSQL 18.3.

Список расширений и дополнительных утилит Postgres Pro Shardman, а также основных видимых пользователю отличий от ванильной версии PostgreSQL, в том числе список унаследованных от Postgres Pro Enterprise возможностей, приведён в Разделе 2. Ниже перечислены значимые отличия этой версии от PostgreSQL 18.3.2 и Shardman 17.9.2:

E.1.1. Ядро и расширения #

Отличия этой версии от Postgres Pro Shardman 17.9.2:

  • Добавлен новый подход для глобальных объектов. Теперь они называются управляемые (распределённые/реплицированные и внутренние) и локальные.

    • Обновлён механизм создания управляемых объектов.

  • Добавлена автоматическая проверка метаданных словарей для DDL-операций.

  • Добавлена новая метрика shared_xmin_raw в представление shardman.pg_stat_csn, которая отображает старейший XID, исключая влияние от горизонта идентификаторов транзакций каталога.

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

  • Добавлена поддержка нескольких ключей сегментирования для FastPath.

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

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

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

  • Нормализовано поведение системы при повторном обновлении строк на удалённых узлах в модифицирующем WITH.

  • Ускорена работа silkworm, теперь он может запускать параллельные запросы.

  • Реализована обёртка сторонних данных для Postgres Pro Shardman. Теперь нет необходимости устанавливать расширение postgres_fdw для доступа к сторонним таблицам на других серверах Postgres Pro Shardman.

  • Оптимизирован перенос статистики между узлами.

  • Сокращено время удержания горизонта, что приводит к меньшему раздуванию.

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

Улучшения, унаследованные от Postgres Pro Enterprise 18.3.2:

  • Реализована возможность для оптимизатора добавлять узлы плана Index Only Scan ниже узлов Append, которые генерируются для предложений OR, если для параметра enable_appendorpath установлено значение on. Это позволяет создавать более эффективные планы запросов и улучшать производительность.

  • Реализована возможность для оптимизатора упрощать конструкции NOT NOT выражение до выражение в связанных подзапросах, тем самым позволяя «подтягивать» эти подзапросы в основной план запроса и улучшать производительность.

  • Добавлена возможность для оптимизатора преобразовывать связанные подзапросы с выражением равенства в связанные подзапросы IN, если для параметра extra_query_transformations установлено значение full. Это позволяет оптимизатору «подтягивать» получившиеся подзапросы и улучшать производительность.

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

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

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

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

  • Оптимизирована производительность заморозки кортежей на странице.

  • Добавлена возможность массово добавлять строки из результатов запроса при создании таблицы командой CREATE TABLE AS с включённым параметром хранения append_optimized.

  • Добавлено значение aggressive параметра хранения append_optimized. Оно позволяет всегда создавать новые страницы для добавляемых строк вместо поиска подходящей страницы в карте свободного пространства. Это улучшение оптимизирует массовое добавление строк в таблицы, в которых свободное пространство распределено по многим страницам.

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

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

    • Изменён формат имени выходных файлов crash_info, в котором теперь указывается дата и время с точностью до микросекунд.

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

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

    • Изменено поведение функции cfs_compression_ratio. Теперь эта функция возвращает значение 1 для несжатых отношений.

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

  • Изменён уровень важности сообщения на ERROR при ошибках конвертации страниц из 32-битного в 64-битный формат. Ранее происходил сбой сервера с PANIC.

  • Добавлена утилита pgpro_wrap для сокрытия (обфускации) кода PL/pgSQL. Утилита помогает защитить хранимые процедуры и функции от несанкционированных изменений.

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

    • Оптимизирован механизм обучения aqo. Теперь aqo игнорирует узлы плана, которые не влияют на оценку количества строк, например узлы Materialized и Sort. Эти игнорируемые узлы больше не пишут детали aqo в вывод команды EXPLAIN и не добавляются в статистику aqo.

    • Изменена реализация механизма вытеснения из кеша давно неиспользуемых данных (LRU) для режима auto. Теперь aqo использует два разных кеша для aqo_data и aqo_query_texts. При достижении предела aqo.dsm_size_max алгоритм LRU сначала удаляет данные из aqo_query_texts при их наличии, а только потом из aqo_data.

  • pgbouncer обновлён до версии 1.25.1 для всех ОС, кроме Альт СП 8, для которой продолжает поставляться pgbouncer 1.24.0.

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

    • Добавлен параметр конфигурации pg_proaudit.log_rows, который включает или отключает регистрацию количества строк, затронутых SQL-командой.

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

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

    • Восстановлена возможность агрегирования статистики по сеансам, которая ранее была удалена как неиспользуемая. Будет ли агрегироваться статистика по сеансам, определяет параметр конфигурации pgpro_stats.track_sessions.

    • Улучшено поведение функций трассировки сеансов. Теперь функции pgpro_stats_trace_insert и pgpro_stats_trace_update завершаются ошибкой, если в передаваемой последовательности пар ключ-значение какой-либо атрибут фильтра встречается несколько раз. Если функции pgpro_stats_trace_update передаётся неправильный аргумент, изменения фильтра более не происходят. Функция pgpro_stats_trace_show теперь возвращает в точности те значения атрибутов explain*, которые были заданы для фильтра.

E.1.2. Утилиты управления #

Отличия этой версии от Postgres Pro Shardman 17.9.2:

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

    • Добавлен переход для кластера и keeper из режима резервного кластера и в этот режим с помощью команд shardmanctl cluster standby enable и shardmanctl cluster standby disable.

    • Добавлен механизм автоматического создания слотов на ведущем и резервном узлах.

    • Улучшена логика формирования файлов точки синхронизации на основе обработки сегментов WAL.

    • Добавлена возможность просматривать файлы хранилища с помощью команд shardmanctl files list и shardmanctl files get.

    • Добавлена остановка pg_receivewal до инициализации резервного кластера из резервной копии с помощью shardmanctl probackup restore.

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

    • Добавлена команда shardmanctl cluster standby config, которая создаёт конфигурационный файл для РЦОД.

    • Добавлены новые возможности управления резервным кластером, а именно ведущими сегментами и резервными узлами, через параметры --lost-shards, --lost-nodes и -s/--soft команды shardmanctl cluster standby disable.

    • Разрешена возможность избежать ситуации, при которых CSN не записывается в WAL из-за отсутствия пишущей нагрузки, с помощью параметра ShardSpec.noopTransactionMonitorTimeout.

    • Обновлена команда shardmanctl cluster status, которая теперь отображает статус кластера в резервном режиме.

    • Добавлена возможность синхронизации экземпляра кластера в РЦОД с экземпляром кластера в ОЦОД с помощью команды shardmanctl cluster standby catchup.

  • Улучшен механизм обновления.

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

    • Добавлена возможность конвертировать выгрузку в формате JSON в бинарный внутренний формат распределённого хранилища конфигурации с помощью команды shardmanctl store convert.

    • Добавлена команда shardmanctl cluster maintenance set для управления режимом обслуживания для указанных экземпляров PostgreSQL.

    • Обновлена логика работы со сторонними утилитами, которые инициируются shardmand и shardmanctl, с помощью новых переменных окружения SDM_PG_MAJOR,SDM_BIN_PATH и SDM_PROBACKUP_PATH, а также общих параметров -bin-path, probackup-path и -pg-major.

  • Создано распределённое хранилище на основе shardmand для замены etcd. Теперь каждый экземпляр shardmand является узлом в новом распределённом хранилище.

    • Добавлена команда shardmanctl store conflicts, отображающая конфликты хранилища.

    • Улучшена логика проверки хранилища с помощью обновлённых команд shardmanctl.

    • Обновлена команда shardmanctl cleanup для работы с новым хранилищем конфигурации.

    • Обновлена команда shardmanctl store для поддержки распределённого хранилища.

    • Обновлён механизм обнаружения. Добавлена поддержка двух параллельных экземпляров shardmand на одном узле.

    • Обновлён процесс удаления узла, теперь при этом из хранилища конфигурации удаляется информация об узлах.

    • Разрешена нормализация распределённого хранилища конфигурации в зависимости от текущей конфигурации узла кластера с помощью shardmanctl store normalize.

    • Разрешено удаление хоста из распределённого хранилища после удаления последнего экземпляра БД на хосте.

    • Удалён параметр конфигурации DataDir. Теперь обязательным является параметр --data-dir или использование переменной окружения SDM_DATA_DIR.

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

    • Разрешено слияние инкрементальных резервных копий с помощью параметров команд shardmanctl probackup merge --merge-from-id и shardmanctl probackup merge --merge-interval.

    • Добавлены параметры управления буфером в команду shardmanctl probackup.

    • Добавлена команда shardmanctl probackup retention, которая определяет политику хранения резервных копий для экземпляра или каталога, а также запускает процесс слияния или удаления резервных копий в зависимости от заданных параметров.

    • Добавлена проверка загрузки pgpro_bindump в shared_preload_libraries и walsender_plugin_libraries.

    • Обновлена работа команд shardmanctl probackup validate, shardmanctl probackup set-config, shardmanctl probackup show-config и удалена команда shardmanctl probackup checkdb.

    • Адаптирован процесс резервного копирования для работы с S3-совместимым хранилищем.

  • Улучшена работа утилит.

    • Добавлена возможность сохранения или удаления всех локальных таблиц с помощью параметра --copy-local-tables при добавлении нового сегмента.

    • Добавлен параметр --for-upgrade для команды shardmanctl restart и параметр --with-restart для команды shardmanctl upgrade.

    • Добавлена возможность пробрасывать команды PSQL на конкретный сегмент с помощью команды shardmanctl psql.

    • Добавлена возможность получить строку подключения для конкретного сегмента с помощью команды shardmanctl getconnstr --shard.

    • Добавлена возможность задавать сокеты с помощью параметра --ipc-socket shardmand.

    • Добавлена проверка занятых портов для следующих команд, чтобы предотвратить их зависание: shardmanctl init, shardmanctl nodes add, shardmanctl shard add.

    • Добавлена поддержка переменной окружения SDM_SERVER_HOST для определения принадлежащих shardmand экземпляров. Также добавлена поддержка нескольких хостов с помощью команды shardmanctl --server-host.

    • Добавлена возможность останавливать или запускать отдельные экземпляры с помощью команд shardmanctl nodes start, shardmanctl nodes stop, shardmanctl shard start и shardmanctl shard stop с указанием порта PostgreSQL в параметре --node=host:port.

    • Запрещён запуск shardmanctl и shardmand от имени корневого пользователя.

    • Обновлён демон shardmand, теперь он не будет запускаться, если на каталог с данными будут заданы некорректные права.

    • Обновлена команда shardmanctl cluster status, теперь она не включает экземпляры узлов referee или referee_with_wal, если команда выполняется на кластере в режиме standby.

    • Обновлён вывод команд shardmanctl config get и shardmanctl config generate, теперь скрываются некоторые поля, для которых не задано значение.

    • Обновлены команды shardmanctl, теперь они принимают файл спецификации в формате YAML и автоматически определяют формат.

    • Доработана логика передачи переменных окружения в командах семейства shardcmanctl bench.

    • Расширено журналирование команд управления экземплярами кластера.

    • Обновлён процесс остановки кластера и сегмента. Теперь сначала полностью останавливается ведущий узел, после него останавливаются резервные кластера, сегменты и узлы с помощью соответствующих команд shardmanctl cluster stop, shardmanctl shard stop, shardmanctl nodes stop.

    • Обновлены команды shardmanctl status, shardmanctl status transactions, shardmanctl rebalance, shardmanctl restart, and shardmanctl restart rolling, которые теперь могут быть запущены на уровне кластера, поэтому теперь их синтаксис следующий: shardmanctl cluster status, shardmanctl cluster status transactions, shardmanctl cluster rebalance, shardmanctl cluster restart, shardmanctl cluster restart rolling.

    • Обновлён синтаксис команд shardmanctl set и shardmanctl unset, обновлённый синтаксис следующий: shardmanctl params set и shardmanctl params unset.

    • Обновлена команда shardmanctl params unset, которую теперь нельзя вызвать для walsender_plugin_libraries.

    • Адаптировали утилиты Postgres Pro Shardman для работы с shardman_fdw.

    • Обновлена команда the shardmanctl config get, которая теперь работает без метаблокировки.

    • Улучшена логика проверки словарей для команды shardmanctl cluster status , теперь учитываются изменения ядра.

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

    • Разрешено выполнение команд вне блока транзакции с помощью флага --no-transaction команды shardmanctl forall.

  • Добавлена проверка дублирования пользователей в sdmspec.json при инициализации кластера.

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

  • Добавлена возможность указать порт shardmand при добавлении узлов.

  • Улучшена логика повышения в случае потери кворума.

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

  • Удалены параметры конфигурации syncPointMonitorLimit и syncPointMonitorEnabled.

  • Обновлён postgres_fdw для работы с распределёнными системами, теперь он называется shardman_fdw. Поэтому при обновлении с предыдущих версий Postgres Pro Shardman после запуска shardmanctl upgrade запустите также drop extension postgres_fdw на каждом узле кластера. Кроме того, необходимо удалить postgres_fdw из shared_preload_libraries.

  • Прекращена поддержка сохранения параметра relations в свойствах внешних серверов.

  • Обновлена поддерживаемая версия bihactl до 2.

  • Улучшена логика хранения выгрузки схемы shardman и добавлено сжатие данных.

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

  • Удалены параметры конфигурации shardmanSchemaDumpMonitorDisabled и shardmanSchemaDumpMonitorTick как избыточные для процесса выгрузки и резервного копирования.

  • Исправлены следующие уязвимости: CVE-2025-61724, CVE-2025-58187, CVE-2025-47912, CVE-2025-58183, CVE-2025-61723, CVE-2025-58186, CVE-2025-58185, CVE-2025-58188, CVE-2025-61725, CVE-2025-61727, CVE-2025-61729, CVE-2025-61726, CVE-2025-68121, CVE-2026-33186.