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

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

Примечание

Postgres Pro Enterprise предоставляется по следующей лицензии: https://postgrespro.ru/products/postgrespro/eula. Обязательно ознакомьтесь с условиями лицензии, прежде чем загружать и использовать 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.
  • Защищённая схема, позволяющая защитить конфиденциальные данные от несанкционированного доступа злоумышленников путём назначения отдельной роли, называемой администратором безопасности и управляющей доступом к схеме и её объектам.
  • Встроенная отказоустойчивость, которая достигается за счёт развёртывания 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.)

От 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 для столбцов таблиц и типов данных в дополнение к реализации по умолчанию. (За подробностями обратитесь к Подраздел 66.2.3.)
  • Автоматическое определение провайдера локалей на основании значения --lc-collate, если провайдер локали не указан в базе данных: libc для локалей C или POSIX, icu для всех других локалей. Также значение по умолчанию параметра --icu-locale совпадает со значением параметра --locale, если оно задано. В противном случае используется значение параметра lc_collate. За дополнительной информацией обратитесь к initdb, createdb и CREATE DATABASE.

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.
  • Модуль 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_multiplan, позволяющее сохранять планы выполнения запросов для последующего использования или фиксировать определённый план выполнения. Это расширение также позволяет хранить глобальные подготовленные операторы и совместно использовать их в нескольких сеансах.
  • Расширение pgpro_planner, предоставляющее преобразования и оптимизации запросов для создания эффективных планов выполнения запросов и улучшения производительности.
  • Расширение pgpro_pwr, позволяющее получать отчёты по нагрузке, полезные для выявления наиболее ресурсоёмких операций в базе данных.
  • Расширение pgpro_queue, предоставляющее управление очередями сообщений непосредственно в базе данных.
  • Расширение pgpro_result_cache, позволяющее сохранять результаты запросов для повторного использования.
  • Расширение pgpro_rp, реализующее функцию приоритизации ресурсов и позволяющее выделять больше ресурсов для сеансов с высоким приоритетом.
  • Модуль pgpro_scheduler, в котором реализованы фоновые исполнители для планируемых задач.
  • Модуль pgpro_sfile, предоставляющий функциональность, схожую c LOB в Oracle, и позволяющий хранить объекты с большим объёмом данных, называемые объектами sfile. Максимальное количество таких объектов, а также размер объекта в байтах ограничены 2^63 - 1.
  • Расширение pgpro_stats, которое собирает статистику выполнения SQL-операторов, подсчитывает статистику событий ожидания и предоставляет прочие полезные метрики, которые в PostgreSQL нельзя получить никак иначе. Оно также обеспечивает возможность трассировки сеансов приложений и может создавать представления, эмулирующие другие расширения для сбора статистики.
  • Расширение pgpro_tde, обеспечивающее защитное преобразование на уровне страниц в Postgres Pro Enterprise.
  • Утилита pgpro_tune для автоматической настройки параметров конфигурации Postgres Pro. Она предоставляет набор встроенных пресетов, включая пресет для настройки, специфичной для 1С.
  • Расширение pgpro_usage, предоставляющее статистику доступа к отношениям и вызова функций в разрезе пользователей, включая представление, показывающее, какие права не используются, и функции, которые возвращают дату и время последнего обращения к таблицам.
  • Модуль pg_query_state, дающий возможность узнавать текущее состояние выполнения запросов в обслуживающем процессе.
  • Утилита pg_repack для реорганизации таблиц.
  • Модуль pg_transfer, осуществляющий поддержку перемещаемых таблиц.
  • Модуль pg_tsparser — альтернативный анализатор текстового поиска.
  • Модуль pg_variables, предоставляющий функции для работы с переменными различных типов. Для облегчения миграции кода Oracle, обрабатывающего коллекции, доступны следующие виды функций: функции, позволяющие работать с общими переменными-коллекциями, к элементам которых можно получить доступ по ключу, имеющему целочисленный или текстовый тип; функции, обеспечивающие функциональность итератора для любых коллекций.
  • Расширение pgvector, предоставляющее поиск сходства векторов в Postgres Pro.
  • Расширение pg_wait_sampling, предназначенное для периодического сбора статистики по событиям ожидания. Воспользовавшись этим расширением, вы сможете понять характер активности сервера, в том числе увидеть текущие события ожидания во всех обычных и фоновых рабочих процессах.
  • Модуль plantuner, добавляющий поддержку указаний для планировщика, подключающих или отключающих определённые индексы при выполнении запроса.
  • Расширение 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 и включает дополнительную цифру.