2. Различия между Postgres Pro Enterprise и PostgreSQL #

Postgres Pro предоставляет наиболее актуальную версию PostgreSQL c дополнительными изменениями и расширениями. Этот продукт включает все новые возможности, реализованные компанией Postgres Professional, а также сторонние доработки, которые уже приняты сообществом PostgreSQL и попадут в новые версии PostgreSQL. Таким образом, пользователи Postgres Pro Enterprise получают ранний доступ к важным нововведениям и исправлениям.

Примечание

Postgres Pro Enterprise предоставляется по следующей лицензии: https://postgrespro.ru/EULA_DBMS. Обязательно ознакомьтесь с условиями лицензии, прежде чем загружать и использовать Postgres Pro Enterprise.

Postgres Pro Enterprise отличают от PostgreSQL следующие усовершенствования:

  • 64-битные идентификаторы транзакций, исключающие проблемы зацикливания. (См. Подраздел 24.1.5.)
  • Сжатие на уровне страниц. (См. Главу 33.)
  • Поддержка автономных транзакций. (См. Главу 16.)
  • Оптимизированная обработка временных таблиц:

    • «Отложенное» размещение временных таблиц на диске. Дисковое пространство для временных таблиц выделяется только при переполнении буферов (размером temp_buffers) и только тогда таблица сохраняется на диске. Так как дисковое пространство для временных таблиц теперь не выделяется сразу, это позволяет значительно сократить нагрузку на диск при работе с ограниченным количеством небольших временных таблиц.
    • Отключение сообщений аннулирования кеша каталога в ходе операций DDL на временных таблицах и в процессе их анализа. Полезно для 1C.
    • Оптимизация аннулирования локального кеша отношений в случаях, когда кортеж временной таблицы или кортеж индекса в pg_class не обновляется при усечении отношения.
    • Управление максимальным объёмом дискового пространства, которое может занимать одна временная таблица. (За подробностями обратитесь к описанию параметра temp_table_max_size.)
  • Автоматическое исправление страниц при потоковой репликации в случае повреждения данных (неиспорченные страницы запрашиваются с ведомого сервера). (См. Подраздел 26.2.5.3.)
  • Справедливое распределение лёгких исключительных блокировок после получения заданного количества разделяемых блокировок. (См. описание параметра lwlock_shared_limit.)
  • Управление количеством секций, на которые будет делиться общая таблица блокировок. (За подробностями обратитесь к описанию параметра log2_num_lock_partitions.)
  • Улучшенная производительность сканирования только индекса при обработке таблиц размером больше 256 МБ.
  • Поддержка копирования, выгрузки и восстановления больших значений bytea и text. (За подробностями обратитесь к описанию параметра enable_large_mem_buffers.)
  • Управление объёмом кеша, который занимают подготовленные операторы. При включении параметра plan_cache_lru_size или plan_cache_lru_memsize разобранные деревья запросов и общие планы, которые не использовались в последнее время, вытесняются из кеша при достижении ограничений, заданных этими параметрами.
  • Усовершенствование выбора между последовательным сканированием и сканированием по индексу. (См. описание параметра seq_scan_startup_cost_first_row.)
  • Улучшение в libpq обработки подключений с несколькими серверами и перехода от одного к другому. (См. описание параметров hostorder и failover_timeout.)
  • Добавление в libpq возможности забыть введённый пароль, что позволяет предотвратить переподключения, когда это требуется политикой безопасности. (См. описание параметра reusepass.)
  • Поддержка вывода времени в pg_waldump.
  • Смягчение ограничений синхронной репликации, в результате которого ведущий сервер может продолжать работать при временной недоступности одного из ведомых. (См. описание параметра synchronous_standby_gap.)
  • Режим автоподготовки операторов, позволяющий неявно подготавливать часто используемые операторы и таким образом оптимизировать затраты на их компиляцию и разбор при каждом последующем выполнении. (См. Раздел 14.6.)
  • Поддержка изменения конфигурации других сеансов. Например, этой возможностью можно воспользоваться, чтобы включить отладочные сообщения для трассировки сеансов с необычным поведением. (См. Подраздел 9.28.1.)
  • Алгоритм поиска k ближайших соседей (k-NN) для индекса-B-дерева. (См. Раздел 11.13.)
  • Устранено практически достижимое ограничение на число записей в ACL (списках управления доступом), связанных с таблицами и индексами.
  • Представление pgpro_stat_wal_activity, показывающее объём файлов WAL, который генерирует каждый процесс.
  • Исправление повреждённых данных WAL из буферов в оперативной памяти.
  • Проверка уникальных ограничений в индексах-B-деревьях, выполняемая модулем amcheck.
  • Поддержка пакетов, которые по существу представляют собой расширенные схемы, помогающие организовать взаимосвязанные именованные объекты. Эта функциональность, знакомая пользователям Oracle, расширяет возможности PL/pgSQL, где появились новые модификаторы функций и соглашения, а также новые команды CREATE PACKAGE и DROP PACKAGE.
  • Поддержка передачи именованных и позиционных аргументов скриптам, вызываемым командой \i в psql.
  • Корпоративная редакция приложения pg_probackup, поддерживающая интерфейс Simple Storage Service (S3) для хранения данных в частных облачных хранилищах, CFS (сжатую файловую систему) для инкрементного копирования, а также алгоритмы сжатия lz4 и zstd.
  • Поддержка массовой вставки данных в одну таблицу несколькими параллельными потоками без использования менеджера буферов Postgres Pro. (См. Многосегментная вставка.)
  • Защищённая схема, позволяющая защитить конфиденциальные данные от несанкционированного доступа злоумышленников путём назначения отдельной роли, называемой администратором безопасности и управляющей доступом к схеме и её объектам.
  • Встроенная отказоустойчивость, которая достигается за счёт развёртывания BiHA-кластера с физической репликацией, встроенным механизмом аварийного переключения узлов, автоматическим обнаружением сбоя узлов, реагированием и последующим изменением конфигурации кластера. Конфигурация такого кластера включает один выделенный узел-лидер и несколько узлов-последователей, которые могут быть как синхронными, так и асинхронными. Новая функциональность обеспечивает защиту от сбоев серверов и систем хранения данных и не требует дополнительного внешнего кластерного ПО.
  • Адаптивное выполнение запросов (AQE), позволяющее переоптимизировать запрос, если во время его выполнения какой-либо триггер указывает, что он недостаточно оптимизирован, то есть предпочтительно найти более оптимальный план.
  • Фоновая заморозка, которая очищает изменённые и незаблокированные страницы данных постоянных таблиц, хранящихся в оперативной памяти. Эта функциональность полезна для 1C.
  • Оптимизации репликации:

    • Улучшенная логика блокировок, чтобы существенно сократить потребление ресурсов процессора в случае восстановления при загрузке на физических репликах, используемых в качестве источника для логической репликации c большим числом принимающих сторон. Процессы walsender не замедляют применение WAL, поскольку используется более эффективный примитив синхронизации вместо циклической блокировки.
    • Сниженное использование ресурсов процессора на резервном сервере с включённой каскадной логической репликацией. В случае большого потока изменений с вышестоящего сервера сигналы пробуждения процессов walsender отправляются после применения группы записей WAL, а не каждой отдельной записи.
    • Использование более эффективного примитива синхронизации вместо циклических блокировок для общей очереди сообщений аннулирования. Это позволяет устранить возможную потерю производительности. Может быть полезно для 1C.
  • Возможность планировщика запросов завышать оценку ожидаемого количества строк в выражениях, содержащих сравнение с неизвестной константой. Эта функциональность полезна для 1C. (См. описание параметра planner_upper_limit_estimation.)
  • Использование системного каталога в оперативной памяти для временных объектов. Эта функциональность полезна для 1C. (См. описание параметра enable_temp_memory_catalog.)
  • Экспериментальная возможность для демона автоочистки обрабатывать индексы таблицы в параллельном режиме. Эта функциональность полезна для 1C. (См. описание параметров parallel_autovacuum_workers и max_parallel_autovacuum_workers.)
  • Повышенная производительность за счёт уменьшения количества блокировок каталога:

    • Оптимизированный механизм для работы с метаданными таблиц, который позволяет получать информацию об атрибутах с использованием системного кеша вместо прямого чтения из системного каталога.
    • Файл pg_internal.init не аннулируется при анализе таблиц каталога, даже когда статистика для этих таблиц часто меняется. Может быть полезно для 1C.
    • Уменьшенное количество запросов на блокировку таблиц pg_attribute и pg_statistic при выполнении запросов с большим количеством отношений, отсутствующих в кеше системы. Может быть полезно для 1C.
  • Пропуск блокировок для временных отношений и индексов этих отношений, а также ограничение действий, которые суперпользователи могут совершать с временными отношениями из других сеансов. Это полезно для 1C. (См. описание параметра skip_temp_rel_lock.)
  • Управление количеством блокировок вставки при одновременной записи в журнал предзаписи (WAL). Это помогает повысить эффективность записи в WAL. (См. описание параметра num_xloginsert_locks.)
  • Процесс фоновой записи в своём главном цикле работы заранее создаёт сегменты WAL для снижения нагрузки на обслуживающие процессы. Параметр конфигурации max_wal_segments_prealloc задаёт максимальное количество таких сегментов.
  • Ограниченный объём памяти, выделяемый серверному процессу, что позволяет предотвратить ошибки нехватки памяти (OOM, out of memory). (За подробностями обратитесь к описанию параметра конфигурации max_backend_memory.)
  • Возможность выделения до 1 ГБ памяти для обработки XML-данных. (За подробностями обратитесь к описанию параметра конфигурации xml_parse_huge.)
  • Возможность получения одиночной блокировки SHARE для таблицы во время проверки ограничений внешних ключей. (За подробностями обратитесь к описанию параметра хранения share_lock_fk.)
  • Преобразование предложений OR в запросы UNION ALL. (За подробностями обратитесь к описанию параметра конфигурации enable_orunion_transformation.)

От Postgres Pro Standard унаследованы следующие усовершенствования:

  • Улучшенный механизм проверки блокировок, не оказывающий отрицательного влияния на производительность.
  • Увеличенная скорость и эффективность планирования для различных типов запросов.
  • Уменьшенное потребление памяти при обработке сложных запросов со множеством таблиц.
  • Добавление времени планирования в информацию, выводимую модулем auto_explain.
  • Возможность замены нулевого байта заданным ASCII-символом при загрузке данных с помощью команды COPY FROM. (См. описание параметра nul_byte_replacement_on_import.)

    Возможность замены символа '\u0000' заданным символом Unicode при вызове функции, обрабатывающей JSONB. (За подробностями обратитесь к описанию параметра unicode_nul_character_replacement_in_jsonb.)

  • Реализация механизма PTRACK, позволяющего программе pg_probackup отслеживать изменения страниц при создании инкрементальных резервных копий.
  • Поддержка чтения файлов pg_control предыдущих версий PostgreSQL/Postgres Pro утилитой pgpro_controldata.
  • Проверка совместимости кластера, позволяющая определить, совместима ли текущая версия Postgres Pro с определённым кластером, и понять, какие параметры влияют на совместимость, не запуская сервер. (См. описание параметра postgres -Z и описание pgpro_controldata.)
  • Унифицированная структура пакетов двоичных файлов для всех дистрибутивов Linux, упрощающая миграцию между ними и позволяющая устанавливать продукты на базе PostgreSQL совместно без каких-либо конфликтов. (См. Главу 17.)
  • Журнал операций, в котором хранится информация о критически важных системных событиях, таких как обновление, выполнение pg_resetwal и тому подобное. Эта информация важна для осуществления технической поддержки со стороны поставщика. Запись в журнал операций производится только на системном уровне, а для его чтения используются функции SQL. (См. Подраздел 9.28.12.)
  • Расширенные политики аутентификации, обеспечивающие эффективное управление паролями и контроль доступа. (См. CREATE PROFILE и ALTER ROLE).
  • Встроенные механизмы защиты данных, которые позволяют стерилизовать объекты, перед удалением заполняя их нулями. Обнуление объектов может производиться перед удалением файлов на диске и перед удалением устаревших версий строк (очисткой страниц), освобождением ОЗУ и удалением или перезаписью файлов WAL. (Только сертифицированная редакция.)
  • Статистика очистки таблиц, индексов и баз данных в системных представлениях.
  • Предопределённые роли, позволяющие создавать табличные пространства и управлять профилями без прав суперпользователя.
  • Сбор информации о сбоях сервера, который включается параметром конфигурации crash_info и находится под управлением нескольких параметров, включая этот.
  • Оптимизированное потребление памяти при оценке избирательности для каждого элемента массива.
  • Улучшенное управление секционированными таблицами с использованием подкоманд SPLIT PARTITION и MERGE PARTITIONS команды ALTER TABLE: первая разделяет одну секцию на несколько, вторая объединяет несколько секций в одну.
  • Механизм параллельного выполнения запросов для запросов, использующих хотя бы одну временную таблицу. Эта функциональность полезна для 1C. (См. описание параметра enable_parallel_temptables.)
  • Оценка приблизительной стоимости сброса страниц временных таблиц на диск. Эта функциональность полезна для 1C. (См. описание параметра write_page_cost.)
  • Возможность преобразования подзапросов ANY в соединения LATERAL. (См. описание параметра enable_any_to_lateral_transformation.)
  • Возможность исследовать повреждённые базы данных с помощью функции pg_snapshot_any. За подробностями обратитесь к Подраздел 9.28.13.
  • Улучшенная производительность поиска сегментов для более быстрого вычисления размера таблиц.
  • Улучшенная производительность в многоядерных системах за счёт увеличения до 1024 количества секций хеш-таблицы сопоставлений в общем буфере.
  • Ускоренная обработка журнала предзаписи (WAL) и TOAST и снижение использования дискового пространства за счёт замены значений по умолчанию параметров default_toast_compression и wal_compression на lz4.
  • Подключаемый механизм TOAST, позволяющий разрабатывать и подключать пользовательские реализации TOAST для столбцов таблиц и типов данных в дополнение к реализации по умолчанию. (За подробностями обратитесь к Подраздел 67.2.3.)
  • Автоматическое определение провайдера локалей на основании значения --lc-collate, если провайдер локали не указан в базе данных: libc для локалей C или POSIX, icu для всех других локалей. Также значение по умолчанию параметра --icu-locale совпадает со значением параметра --locale, если оно задано. В противном случае используется значение параметра lc_collate. За дополнительной информацией обратитесь к initdb, createdb и CREATE DATABASE.
  • Смягчение ограничений синхронной репликации, в результате которого ведущий сервер может продолжать работать при временной недоступности одного из ведомых. (См. описание параметра synchronous_standby_gap.)

Postgres Pro Enterprise также включает следующие дополнительные модули и приложения:

  • Расширение apache_age, добавляющее в Postgres Pro функциональность для работы с графовыми базами данных.
  • Расширение aqo для адаптивной оптимизации запросов.
  • Модуль auto_dump для сбора данных по длительным и проблемным запросам и последующего воспроизведения этих запросов с целью устранения неполадок.
  • Расширение biha, управляемое с помощью утилиты bihactl и превращающее Postgres Pro в кластер с физической репликацией и встроенным механизмом аварийного переключения узлов, отказоустойчивостью и восстановлением после сбоя узла.
  • Расширение daterange_inclusive, позволяющее добавлять в вывод верхнюю границу временного диапазона.
  • Расширение dbms_lob, позволяющее получать доступ к определённым частям больших объектов или большим объектам целиком и управлять ими.
  • Модуль dump_stat, позволяющий сохранять статистику данных при резервном копировании и восстановлении.
  • Модуль fasttrun, который предоставляет транзакционно-небезопасную функцию для усечения временных таблиц, что предотвращает разрастание каталога pg_class.
  • Модуль fulleq, предоставляющий дополнительный оператор равенства для совместимости с Microsoft SQL Server.
  • Модуль hunspell-dict, предоставляющий словари для ряда языков.
  • Расширение hypopg, обеспечивающее поддержку гипотетических индексов в Postgres Pro.
  • Модуль in_memory, позволяющий размещать данные в общей памяти Postgres Pro.
  • Модуль jsquery, реализующий специальный язык запросов для эффективного поиска по индексу в структурированных данных JSONB.
  • Утилита ldap2pg, позволяющая автоматизировать процесс создания, изменения и удаления ролей и пользователей корпоративного каталога Postgres Pro.
  • Служба мониторинга mamonsu, исполненная в виде агента Zabbix.
  • Модуль mchar, предоставляющий дополнительный тип данных для совместимости с Microsoft SQL Server.
  • Расширение multimaster, превращающее Postgres Pro Enterprise в синхронный кластер без разделения ресурсов, который обеспечивает расширяемость OLTP для читающих транзакций, а также высокую степень доступности с автоматическим восстановлением после сбоев.
  • Модуль online_analyze, привносящий набор функций, которые немедленно обновляют статистику в целевых таблицах после операций INSERT, UPDATE, DELETE или SELECT INTO в них.
  • pgbadger — инструмент для быстрого анализа журналов Postgres Pro с созданием подробных отчётов и графиков.
  • Пул соединений pgbouncer.
  • Утилита pgbouncer_exporter, экспортирующая метрики Prometheus для pgbouncer.
  • Модуль pg_hint_plan, управляющий планом выполнения запросов со специальными указаниями для планировщика.
  • Модуль pg_integrity_check, осуществляющий вычисление и проверку контрольных сумм отслеживаемых файлов. (Только сертифицированная редакция.)
  • Расширение pg_proaudit, позволяющее отслеживать различные события, связанные с безопасностью.
  • Расширение pgpro_anonymizer, позволяющее маскировать или заменять конфиденциальные коммерческие данные или информацию, по которой можно установить личность, в БД Postgres Pro.
  • Расширение pgpro_application_info, которое предназначено для помощи разработчикам в переносе приложений, использующих пакет DBMS_APPLICATION_INFO, из Oracle в Postgres Pro.
  • Расширение pgpro_autopart, реализующее динамическое создание секций.
  • pg_probackup — менеджер резервного копирования и восстановления.
  • Решение pg_probackup3 для резервного копирования и восстановления кластеров баз данных Postgres Pro.
  • Расширение pg_trgm_mchar, обеспечивающее быстрый поиск схожих строк типов mchar и mvarchar на основе триграмм. Это расширение полезно для 1C.
  • Расширение pgpro_bfile, предоставляющее составной тип bfile и реализующее подобную Oracle технику доступа к внешнему файлу.
  • Модуль pgpro_bindump для управления операциями резервного копирования и восстановления. В модуле реализованы специализированные команды репликации для расширенного протокола репликации и собственный формат архивирования. Модуль не требует подключения по SSH. Он разработан специально для использования вместе с утилитой pg_probackup3.
  • Утилита pgpro_controldata, показывающая управляющую информацию кластера БД PostgreSQL/Postgres Pro и параметры совместимости кластера и/или сервера.
  • pg_filedump — приложение для отображения отформатированного содержимого управляющего файла, а также файлов кучи и индекса Postgres Pro.
  • Расширение pgpro_cpumeter, которое предоставляет доступ к новой системной функции мониторинга использования процессора. Функция pgpro_cpumeter непрерывно собирает и записывает информацию о ядрах процессора, используемых процессами сервера Postgres Pro.
  • Утилита pgpro_datactl для управления файлами данных Postgres Pro, которая включает в себя модуль распаковки и анализа файлов CFS.
  • Расширение pgpro_gbtree, позволяющее создавать и использовать глобальные индексы для секционированных таблиц. Глобальный индекс создаётся для одного или нескольких столбцов секционированной таблицы и не включает ключ секционирования. Это позволяет выполнять сканирование индекса без перебора всех секций.
  • Расширение pgpro_ilm, позволяющее переносить редко используемые отношения в более дешёвое хранилище. Эта функциональность аналогична управлению жизненным циклом информации (information lifecycle management, ILM) компании Oracle.
  • Расширение pgpro_logical_slot, позволяющее продолжать логическую репликацию в случае, если слот логической репликации был аннулирован или некорректно удалён.
  • Расширение pgpro_multiplan, позволяющее сохранять планы выполнения запросов для последующего использования или фиксировать определённый план выполнения.
  • Расширение pgpro_planner, предоставляющее преобразования и оптимизации запросов для создания эффективных планов выполнения запросов и улучшения производительности.
  • Расширение pgpro_pwr, позволяющее получать отчёты по нагрузке, полезные для выявления наиболее ресурсоёмких операций в базе данных.
  • Расширение pgpro_queue, предоставляющее управление очередями сообщений непосредственно в базе данных.
  • Расширение pgpro_result_cache, позволяющее сохранять результаты запросов для повторного использования.
  • Расширение pgpro_rp, реализующее функцию приоритизации ресурсов и позволяющее выделять больше ресурсов для сеансов с высоким приоритетом.
  • Модуль pgpro_scheduler, в котором реализованы фоновые исполнители для планируемых задач.
  • Утилита pgpro_scout для обнаружения чувствительной (конфиденциальной) информации в базе данных. Задача утилиты провести разведку данных на предмет наличия такой информации и привести примеры.
  • Модуль pgpro_sfile, предоставляющий функциональность, схожую c LOB в Oracle, и позволяющий хранить объекты с большим объёмом данных, называемые объектами sfile. Максимальное количество таких объектов, а также размер объекта в байтах ограничены 2^63 - 1.
  • Расширение pgpro_stats, которое собирает статистику выполнения SQL-операторов, подсчитывает статистику событий ожидания и предоставляет прочие полезные метрики, которые в PostgreSQL нельзя получить никак иначе. Оно также обеспечивает возможность трассировки сеансов приложений и может создавать представления, эмулирующие другие расширения для сбора статистики.
  • Расширение pgpro_tde, обеспечивающее защитное преобразование на уровне страниц в Postgres Pro Enterprise.
  • Расширение pgpro_temp_stats, которое собирает статистику по нескольким столбцам временных таблиц, задействованным в запросах.
  • Утилита pgpro_tune для автоматической настройки параметров конфигурации Postgres Pro. Она предоставляет набор встроенных пресетов, включая пресет для настройки, специфичной для 1С.
  • Расширение pgpro_usage, предоставляющее статистику доступа к отношениям и вызова функций в разрезе пользователей, включая представление, показывающее, какие права не используются, и функции, которые возвращают дату и время последнего обращения к таблицам.
  • Утилита pgpro_validate для проверки целостности данных экземпляра Postgres Pro.
  • Модуль pg_query_state, дающий возможность узнавать текущее состояние выполнения запросов в обслуживающем процессе.
  • Утилита pg_repack для реорганизации таблиц.
  • Модуль pg_transfer, осуществляющий поддержку перемещаемых таблиц.
  • Модуль pg_tsparser — альтернативный анализатор текстового поиска.
  • Модуль pg_variables, предоставляющий функции для работы с переменными различных типов. Для облегчения миграции кода Oracle, обрабатывающего коллекции, доступны следующие виды функций: функции, позволяющие работать с общими переменными-коллекциями, к элементам которых можно получить доступ по ключу, имеющему целочисленный или текстовый тип; функции, обеспечивающие функциональность итератора для любых коллекций.
  • Расширение pgvector, предоставляющее поиск сходства векторов в Postgres Pro.
  • Расширение pg_wait_sampling, предназначенное для периодического сбора статистики по событиям ожидания. Воспользовавшись этим расширением, вы сможете понять характер активности сервера, в том числе увидеть текущие события ожидания во всех обычных и фоновых рабочих процессах.
  • Модуль plantuner, добавляющий поддержку указаний для планировщика, подключающих или отключающих определённые индексы при выполнении запроса.
  • Модуль pljava, позволяющий использовать хранимые процедуры, триггеры и функции, написанные на языке Java, в Postgres Pro.
  • Расширение plpgsql_check, предоставляющее возможность статического анализа кода для PL/pgSQL в Postgres Pro.
  • Расширение proxima, объединяющее функциональность прокси-сервера и пула соединений.
  • Модуль rum, предоставляющий индекс RUM на базе GIN.
  • Модуль shared_ispell, позволяющий разместить словари в общей памяти.
  • Расширение utl_http, позволяющее получать доступ к данным в Интернете по протоколу HTTP, выполняя HTTP-вызовы из SQL и PL/pgSQL.
  • Расширение utl_mail, предназначенное для управления электронной почтой и включающее часто используемые возможности электронной почты, такие как вложение, копия и скрытая копия.
  • Расширение utl_smtp, предназначенное для отправки электронной почты по протоколу SMTP из PL/pgSQL.

Postgres Pro предоставляет расширенные возможности и функциональность, поэтому предъявляет более строгие требования, ограничивающие множество поддерживаемых операционных систем.

Важно

Postgres Pro Enterprise работает на всех основных операционных системах Linux. Любые упоминания Windows или другой операционной системы, отличной от Linux, в этой документации неприменимы к Postgres Pro.

Выпуски Postgres Pro Enterprise следуют за выпусками PostgreSQL, хотя иногда могут выпускаться чаще. Схема версионирования Postgres Pro Enterprise основана на схеме версионирования PostgreSQL и включает дополнительную цифру.

2. Difference between Postgres Pro Enterprise and PostgreSQL #

Postgres Pro provides the most actual PostgreSQL version with some additional patches applied and extensions added. It includes new features developed by Postgres Professional, as well as third-party patches already accepted by the PostgreSQL community for the upcoming PostgreSQL versions. Postgres Pro Enterprise users thus have early access to important features and fixes.

Note

Postgres Pro Enterprise is provided under the following license: https://postgrespro.com/EULA_DBMS. Make sure to review the license terms before downloading Postgres Pro Enterprise.

Postgres Pro Enterprise provides the following enhancements over PostgreSQL:

  • 64-bit transaction IDs that are not subject to wraparound. (See Section 24.1.5.)
  • Page-level compression. (See Chapter 33.)
  • Support for autonomous transactions. (See Chapter 16.)
  • Optimized processing of temporary tables:

    • Lazy placement of temporary tables on disk. Disk space for temporary tables is allocated only when they exceed the temp_buffers size and have to be spilled to disk. Since disk space for temporary tables is not reserved in advance anymore, it allows to significantly reduce disk usage when working with multiple small temporary tables.
    • Suppressing catalog cache invalidation messages for DDL operations on temporary tables and for analyzing these tables. This is useful for 1C.
    • Optimized invalidation of the local relation cache when a temporary table tuple or an index tuple in the pg_class is not updated in case of the relation truncation.
    • Controlling the maximum amount of disk space that a single temporary table can occupy. (See temp_table_max_size parameter description.)
  • Automatic page repair via streaming replication from standby in case of data corruption. (See Section 26.2.5.3.)
  • Fair lightweight lock scheduling after the specified number of shared locks is acquired. (See lwlock_shared_limit parameter description.)
  • Controlling the number of partitions the shared lock tables are divided into. (See log2_num_lock_partitions parameter description.)
  • Improved performance of index-only scans with tables larger than 256 MB.
  • Support for copying, dumping, and restoring large bytea and text values. (See enable_large_mem_buffers parameter description.)
  • Controlling the amount of cache used by prepared statements. With plan_cache_lru_size or plan_cache_lru_memsize configuration parameters enabled, query trees and generic plans of the least recently used statements are evicted from cache once the specified limit is reached.
  • Improved prioritization of sequential and index scans. (See seq_scan_startup_cost_first_row parameter description.)
  • Improved multi-host connection handling and failover by libpq. (See hostorder and failover_timeout parameter descriptions.)
  • Enabling libpq to forget the entered password, which allows to prevent reconnections when required by a security policy. (See reusepass parameter description.)
  • Support for timestamp output in pg_waldump.
  • Support for relaxed synchronous replication restrictions, which allows the primary server to continue running while some of the standbys are temporarily unavailable. (See synchronous_standby_gap parameter description.)
  • The autoprepare mode that allows to implicitly prepare frequently used statements, thus eliminating the cost of their compilation and planning on each subsequent execution. (See Section 14.6.)
  • Support for changing configuration of other sessions. For example, you can use this feature to switch on debug messages to trace sessions with unexpected behavior. (See Section 9.28.1.)
  • K-nearest neighbors (k-NN) algorithm for B-tree indexes. (See Section 11.13.)
  • Removing a practically reachable limit on the number of entries in ACL (access control list, i.e., privileges list) associated with tables and indexes.
  • The pgpro_stat_wal_activity view that shows the size of WAL files generated by each process.
  • Restoration of corrupted WAL data from in-memory WAL buffers.
  • Verification of unique constraints in B-tree indexes in the amcheck module.
  • Support for packages, which are essentially enhanced schemas that help to organize named objects with a related purpose. This feature provides extended functionality, familiar to Oracle users, for PL/pgSQL where new function modifiers and conventions were introduced, as well as new CREATE PACKAGE and DROP PACKAGE commands.
  • Support for passing named and positional arguments to scripts invoked by the \i command in psql.
  • pg_probackup enterprise edition, which provides Simple Storage Service (S3) support for storing data in private clouds, CFS (Compressed File System) support for incremental backups, and support for lz4 and zstd compression algorithms.
  • Support for bulk data insertion to the same table in multiple threads simultaneously bypassing the Postgres Pro buffer manager. (See Multi-Segment Insertion.)
  • The vault schema that allows protecting sensitive data against unauthorized access of malicious users by designating a separate role called security officer who manages access to the schema and its objects.
  • The built-in high availability that is achieved by deploying the BiHA cluster with physical replication, built-in failover, automatic node failure detection, response, and subsequent cluster reconfiguration. Such cluster is configured with one dedicated leader node and several follower nodes, which can be both synchronous and asynchronous. The new functionality enables protection against server failures and data storage system failures and does not require any additional external cluster software.
  • Adaptive query execution (AQE), which enables reoptimizing a query, if during the execution some trigger indicates that it is non-optimal, so a more optimal plan should be looked for.
  • Background freezer that vacuums modified and non-locked data pages of permanent tables stored in RAM. This feature is useful for 1C.
  • Replication optimizations:

    • Enhanced lock logic to reduce CPU consumption significantly in case of startup recovery on physical replicas used as a source for logical replication with many downstreams. Walsenders do not slow down WAL application as a more efficient synchronization primitive is used instead of spinlock.
    • Lower CPU consumption on a standby instance with enabled cascading logical replication. Wake-ups of walsender processes are sent after applying a group of WAL records rather than each individual record in case of high stream of changes from the upstream instance.
    • Using a more efficient synchronization primitive instead of previously used spinlocks for a shared invalidation message queue, which allows avoiding a bottleneck. This may be useful for 1C.
  • Enabling the query planner to overestimate the expected number of rows in statements that contain a comparison to an unknown constant. This feature is useful for 1C. (See planner_upper_limit_estimation parameter description.)
  • Using an in-memory system catalog for temporary objects. This feature is useful for 1C. (See enable_temp_memory_catalog parameter description.)
  • The experimental possibility for the autovacuum daemon to process indexes of a table in a parallel mode. This feature is useful for 1C. (See parallel_autovacuum_workers and max_parallel_autovacuum_workers parameter descriptions.)
  • Reducing the number of catalog locks to improve performance:

    • Optimized mechanism for working with table metadata, which allows obtaining information about attributes using the system cache instead of direct reading from the system catalog.
    • Avoiding invalidation of the pg_internal.init file when analyzing catalog tables, particularly when statistics for these tables change frequently. This may be useful for 1C.
    • Reducing the number of locking requests for the pg_attribute and pg_statistic tables for queries with a large number of relations that are not present in the system cache. This may be useful for 1C.
  • Skipping locking for temporary relations and indexes on these relations as well as restricting superuser actions with temporary relations of other sessions. This is useful for 1C. (See skip_temp_rel_lock parameter description.)
  • Controlling the number of insertion locks on concurrent write-ahead logging. This helps to improve the efficiency of writing write-ahead logs. (See num_xloginsert_locks parameter description.)
  • Enabling the background writer to create WAL segments in advance during its main operation cycle for reducing the load on backend processes. The max_wal_segments_prealloc configuration parameter sets the maximum number of such segments.
  • Restricting the maximum amount of memory that can be allocated to a backend to prevent OOM errors. (See the max_backend_memory configuration parameter.)
  • Allocating up to 1 GB of memory for processing XML data. (See the xml_parse_huge configuration parameter.)
  • Enabling acquisition of a single SHARE lock on the table during foreign key constraint checks. (See the share_lock_fk storage parameter.)
  • Transforming OR clauses into UNION ALL queries. (See the enable_orunion_transformation configuration parameter.)

The following enhancements are inherited from Postgres Pro Standard:

  • Improved deadlock detection mechanism that does not cause performance degradation.
  • Better planning speed and accuracy for various query types.
  • Reduced memory consumption in complex queries that involve multiple tables.
  • Displaying planning time in the output of the auto_explain module.
  • NUL byte replacement with the specified ASCII code while loading data using the COPY FROM command. (See nul_byte_replacement_on_import parameter description.)

    '\u0000' character replacement with the specified unicode character when calling a function processing JSONB. (See unicode_nul_character_replacement_in_jsonb parameter description.)

  • PTRACK implementation, which enables pg_probackup to track page changes on the fly when creating incremental backups.
  • Support for reading pg_control of previous PostgreSQL/Postgres Pro major versions by pgpro_controldata.
  • Cluster compatibility verification, which allows you to determine whether the current Postgres Pro version is compatible with the specified cluster and identify all parameters that can affect the compatibility without starting the cluster. (See pgpro_controldata and -Z option of postgres.)
  • Unified structure of binary installation packages across all Linux distributions, which facilitates migration between them and allows installing PostgreSQL-based products side by side, without any conflicts. (See Chapter 17.)
  • Operation log, which stores information about system events such as an upgrade, execution of pg_resetwal and so on, which is highly useful for vendor's technical support. Recording to the operation log is only done at the system level, and SQL functions are used to read it. (See Section 9.28.12.)
  • Advanced authentication policies that provide effective password management and access control. (See CREATE PROFILE and ALTER ROLE).
  • Built-in data security mechanisms that enable sanitizing an object by filling it with zeroes before deletion. Zeroing can be done before purging files in external memory and removing outdated row versions (page vacuum), freeing RAM, and deleting or overwriting WAL files. (Certified edition only.)
  • Statistics about vacuuming tables, indexes and databases in system views.
  • Predefined roles, which allow creating tablespaces and managing profiles without superuser rights.
  • Getting information on crashes of a backend, which is enabled by the crash_info configuration parameter and controlled by more of them.
  • Optimized memory consumption during selectivity estimation for each array element.
  • Improved partitioned table management by means of the SPLIT PARTITION and MERGE PARTITIONS subcommands in the ALTER TABLE command, which split a single partition into several partitions and merge several partitions into one, respectively.
  • The parallel query execution mechanism for queries that involve at least one temporary table. This feature is useful for 1C. (See enable_parallel_temptables parameter description.)
  • Estimating the cost of flushing temporary table pages to disk. This feature is useful for 1C. (See write_page_cost parameter description.)
  • Enabling transformation of ANY subqueries into LATERAL joins. (See enable_any_to_lateral_transformation parameter description.)
  • The ability to explore corrupted databases using the pg_snapshot_any function. See Section 9.28.13 for details.
  • Enhanced performance of segment search for better speed of table size calculations.
  • Improved performance on multi-core systems by increasing the number of partitions of the shared buffer mapping hash table to 1024.
  • Faster WAL and TOAST processing and reduced disk space utilization by updating the default values of default_toast_compression and wal_compression to lz4.
  • Pluggable TOAST that allows you to develop and plug in custom TOAST implementations for table columns and data types in addition to the default one. (See Section 67.2.3 for details.)
  • Automatic detection of the locale provider based on the --lc-collate value if the locale provider is not specified in the database: libc is used for the C or POSIX locales, and icu is used for other locales. Also, the default value of the --icu-locale parameter is the setting of --locale if specified and otherwise the value of lc_collate. For more information, see initdb, createdb, and CREATE DATABASE.
  • Support for relaxed synchronous replication restrictions, which allows the primary server to continue running while some of the standbys are temporarily unavailable. (See synchronous_standby_gap parameter description.)

Postgres Pro Enterprise also includes the following additional modules and applications:

  • apache_age extension that provides graph database functionality.
  • aqo extension for adaptive query optimization.
  • auto_dump module that collects data on long-running and problematic queries and reproduces these problems for troubleshooting.
  • biha extension, which is managed with the bihactl utility, that turns Postgres Pro into a cluster with physical replication and built-in failover, high availability, and node failure recovery.
  • daterange_inclusive extension, which allows you to include the upper bound of a time range in the output.
  • dbms_lob extension that allows accessing and manipulating specific parts of a LOB or complete LOBs.
  • dump_stat module that allows to save and restore database statistics when dumping/restoring the database.
  • fasttrun module that provides transaction-unsafe function to truncate temporary tables without growing pg_class size.
  • fulleq module that provides additional equivalence operator for compatibility with Microsoft SQL Server.
  • hunspell-dict module that provides dictionaries for several languages.
  • hypopg extension, which provides support for hypothetical indexes in Postgres Pro.
  • in_memory module that enables you to store data in Postgres Pro shared memory.
  • jsquery module that provides a specific language for effective index-supported querying of JSONB data.
  • ldap2pg utility that automates the creation, update, and removal of Postgres Pro roles and users from an enterprise directory.
  • mamonsu monitoring service, which is implemented as a Zabbix agent.
  • mchar module that provides additional data type for compatibility with Microsoft SQL Server.
  • multimaster extension that turns Postgres Pro Enterprise into a synchronous shared-nothing cluster to provide Online Transaction Processing (OLTP) scalability for read transactions and high availability with automatic disaster recovery.
  • online_analyze module that provides a set of changes to immediately update statistics after INSERT, UPDATE, DELETE or SELECT INTO operations applied for affected tables.
  • pgbadger application that rapidly analyzes Postgres Pro logs, producing detailed reports and graphs.
  • pgbouncer connection pooler.
  • pgbouncer_exporter utility to export Prometheus metrics for pgbouncer.
  • pg_hint_plan module that controls the execution plan by providing hints to the planner.
  • pg_integrity_check module that calculates and validates checksums for controlled files. (Certified edition only.)
  • pg_proaudit extension that enables detailed logging of various security events.
  • pgpro_anonymizer extension that provides the ability to mask or replace personally identifiable information or commercially sensitive data from a Postgres Pro database.
  • pgpro_application_info extension designed to help developers who port applications using the DBMS_APPLICATION_INFO package from Oracle to Postgres Pro.
  • pgpro_autopart extension that enables dynamic partition creation.
  • pg_probackup, a backup and recovery manager.
  • pg_probackup3 solution for backup and recovery of Postgres Pro database clusters.
  • pg_trgm_mchar extension that allows fast trigram-based search for similar mchar and mvarchar strings. This extension is useful for 1C.
  • pgpro_bfile extension providing a composite type bfile that implements an Oracle-like technique to access an external file.
  • pgpro_bindump module to manage backup and restore operations. This module implements specialized replication commands for an extended replication protocol, has its own format for archiving files, and does not require SSH connection. It is designed specifically for use with the pg_probackup3 utility.
  • pgpro_controldata, an application to display control information of a PostgreSQL/Postgres Pro database cluster and compatibility information for a cluster and/or server.
  • pg_filedump application that displays formatted contents of a Postgres Pro heap, index, or control file.
  • pgpro_cpumeter, an extension providing access to a new CPU usage monitoring system function. This pgpro_cpumeter function continuously collects and records information about CPU cores used by Postgres Pro server processes.
  • pgpro_datactl utility to manage Postgres Pro data files, which includes a module for unpacking and analyzing CFS files.
  • pgpro_gbtree extension that enables creation and use of a global index on a partitioned table. The global index is created for one or several columns of a partitioned table and does not include the partition key. It allows you to perform index scan without iterating through all the partitions.
  • pgpro_ilm extension that enables moving rarely used relations to a lower-cost storage. This feature is similar to Oracle's information lifecycle management (ILM).
  • pgpro_logical_slot extension that provides the ability to continue logical replication in case a logical slot was invalidated or incorrectly deleted.
  • pgpro_multiplan extension to save query execution plans for future usage or lock a specific execution plan.
  • pgpro_planner extension that provides query transformations and optimizations to produce efficient query execution plans and improve performance.
  • pgpro_pwr extension that enables you to generate workload reports, which help to discover most resource-intensive activities in your database.
  • pgpro_queue extension that provides message queueing management directly within the database.
  • pgpro_result_cache extension to save query results for reuse.
  • pgpro_rp extension that implements resource prioritization feature, which allows allocating more resources to high-priority sessions.
  • pgpro_scheduler module that provides background workers for task scheduling.
  • pgpro_scout utility to detect sensitive (confidential) information in your database. The utility performs data intelligence to determine whether such information exists and show sensitive data samples.
  • pgpro_sfile module, which is similar to Oracle LOBs. It allows storing multiple large objects, called sfile objects. The maximum number of such objects as well as object size in bytes is limited by 2^63 - 1.
  • pgpro_stats extension that tracks execution statistics of SQL statements, calculates wait event statistics and provides other useful metrics that are not collected elsewhere in PostgreSQL. It also provides tracing of application sessions and can create views that emulate other statistic collecting extensions.
  • pgpro_tde extension, which enables page level encryption in Postgres Pro Enterprise.
  • pgpro_temp_stats extension that collects multicolumn statistics on temporary tables referenced by queries.
  • pgpro_tune utility for automatic tuning of Postgres Pro configuration parameters. It provides a set of built-in presets including a preset for 1C-specific configuration.
  • pgpro_usage extension that provides per-user statistics on accessing relations and calling functions, including a view that shows which privileges are unused and functions that return the date and time of the last access to tables.
  • pgpro_validate utility to check data integrity of a Postgres Pro instance.
  • pg_query_state module that enables you to get the current state of query execution for a backend.
  • pg_repack utility for reorganizing tables.
  • pg_transfer module that provides support for relocatable tables.
  • pg_tsparser module, which is an alternative text search parser.
  • pg_variables module that provides functions for working with variables of various types. To facilitate migration of Oracle code that processes collections, these functions include those that allow working with general collection variables, whose elements can be accessed by a key that can have either integer or text type, and those that provide iterator functionality for any collections.
  • pgvector extension that provides vector similarity search for Postgres Pro.
  • pg_wait_sampling extension for sampling-based statistics of wait events. With this extension, you can get an insight into the server activity, including the current wait events for all processes and background workers.
  • plantuner module that provides hints for the planner to disable or enable indexes for query execution.
  • pljava module that brings Java stored procedures, triggers, and functions to the Postgres Pro backend.
  • plpgsql_check extension that provides static code analysis for PL/pgSQL in Postgres Pro.
  • proxima extension that combines functionality of a proxy server and a connection pooler.
  • rum module that provides RUM index based on GIN.
  • shared_ispell module that enables storing dictionaries in shared memory.
  • utl_http extension that allows accessing data on the Internet over the HTTP protocol by invoking HTTP callouts from SQL and PL/pgSQL.
  • utl_mail extension designed for managing emails, which includes commonly used email features, such as attachments, CC, and BCC.
  • utl_smtp extension designed for sending emails over SMTP from PL/pgSQL.

To provide the advanced functionalities and features, Postgres Pro imposes more stringent requirements on operating systems supported.

Important

Postgres Pro Enterprise runs on all major Linux operating systems. Any reference to Windows or another operating system different from Linux in this documentation is inapplicable for Postgres Pro.

Postgres Pro Enterprise releases follow PostgreSQL releases, though sometimes occur more frequently. The Postgres Pro Enterprise versioning scheme is based on the PostgreSQL one and has an additional decimal place.

FAQ