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) и только тогда таблица сохраняется на диске. Так как дисковое пространство для временных таблиц теперь не выделяется сразу, это позволяет значительно сократить нагрузку на диск при работе с ограниченным количеством небольших временных таблиц.
  • Автоматическое исправление страниц при потоковой репликации в случае повреждения данных (неиспорченные страницы запрашиваются с ведомого сервера). (См. Подраздел 26.2.5.3.)
  • Справедливое распределение лёгких исключительных блокировок после получения заданного количества разделяемых блокировок. (См. описание параметра lwlock_shared_limit.)
  • Управление объёмом кеша, который занимают подготовленные операторы. При включении параметра 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.)
  • Встроенный пул соединений, позволяющий ограничивать число обслуживающих процессов при подключении множества клиентов, не накладывая ограничения на использование параметров конфигурации сеансов, подготовленных операторов или временных таблиц. (За подробностями обратитесь к Главе 34.)
  • Режим автоподготовки операторов, позволяющий неявно подготавливать часто используемые операторы и таким образом оптимизировать затраты на их компиляцию и разбор при каждом последующем выполнении. (См. Раздел 14.6.)
  • Поддержка изменения конфигурации других сеансов. Например, этой возможностью можно воспользоваться, чтобы включить отладочные сообщения для трассировки сеансов с необычным поведением. (См. Подраздел 9.27.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.
  • Исключение дубликатов блокировок, благодаря которому обеспечивается эффективное хранение в памяти и отслеживание всех исключительных блокировок, удерживаемых процессом запуска резервного сервера во время воспроизведения WAL.
  • Защищённая схема, позволяющая защитить конфиденциальные данные от несанкционированного доступа злоумышленников путём назначения отдельной роли, называемой администратором безопасности и управляющей доступом к схеме и её объектам.
  • Встроенная отказоустойчивость, которая достигается за счёт развёртывания кластера biha с физической репликацией, встроенным механизмом аварийного переключения узлов, автоматическим обнаружением сбоя узлов, реагированием и последующим изменением конфигурации кластера. Конфигурация такого кластера включает один выделенный узел-лидер и несколько узлов-последователей, которые могут быть как синхронными, так и асинхронными. Новая функциональность обеспечивает защиту от сбоев серверов и систем хранения данных и не требует дополнительного внешнего кластерного ПО.
  • Модуль pgpro_sfile, предоставляющий функциональность, схожую c LOB в Oracle, и позволяющий хранить объекты с большим объёмом данных, называемые объектами sfile. Максимальное количество таких объектов, а также размер объекта в байтах ограничены 2^63 - 1.

От 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.)
  • Возможность изменения параметра restore_command без перезапуска сервера.
  • Унифицированная структура пакетов двоичных файлов для всех дистрибутивов Linux, упрощающая миграцию между ними и позволяющая устанавливать продукты на базе PostgreSQL совместно без каких-либо конфликтов. (См. Главу 17.)
  • Журнал операций, в котором хранится информация о критически важных системных событиях, таких как обновление, выполнение pg_resetwal и тому подобное. Эта информация важна для осуществления технической поддержки со стороны поставщика. Запись в журнал операций производится только на системном уровне, а для его чтения используются функции SQL. (См. Подраздел 9.27.12.)
  • Расширенные политики аутентификации, обеспечивающие эффективное управление паролями и контроль доступа. (См. CREATE PROFILE и ALTER ROLE).
  • Встроенные механизмы защиты данных, которые позволяют стерилизовать объекты, перед удалением заполняя их нулями. Обнуление объектов может производиться перед удалением файлов на диске и перед удалением устаревших версий строк (очисткой страниц), освобождением ОЗУ и удалением или перезаписью файлов WAL. (Только сертифицированная редакция.)
  • Статистика очистки таблиц, индексов и баз данных в системных представлениях.
  • Предопределённые роли, позволяющие создавать табличные пространства и управлять профилями без прав суперпользователя.
  • Сбор информации о сбоях сервера, который включается параметром конфигурации crash_info и находится под управлением нескольких параметров, включая этот.
  • Оптимизированное потребление памяти при оценке избирательности для каждого элемента массива.

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

  • Расширение apache_age, добавляющее в Postgres Pro функциональность для работы с графовыми базами данных.
  • Расширение aqo для адаптивной оптимизации запросов.
  • Расширение biha, управляемое с помощью утилиты bihactl и превращающее Postgres Pro в кластер с физической репликацией и встроенным механизмом аварийного переключения узлов, отказоустойчивостью и восстановлением после сбоя узла.
  • Расширение dbms_lob, позволяющее получать доступ к определённым частям больших объектов или большим объектам целиком и управлять ими.
  • Модуль dump_stat, позволяющий сохранять статистику данных при резервном копировании и восстановлении.
  • Модуль fasttrun, который предоставляет транзакционно-небезопасную функцию для усечения временных таблиц, что предотвращает разрастание каталога pg_class.
  • Модуль fulleq, предоставляющий дополнительный оператор равенства для совместимости с Microsoft SQL Server.
  • Модуль hunspell-dict, предоставляющий словари для ряда языков.
  • Расширение hypopg, обеспечивающее поддержку гипотетических индексов в Postgres Pro.
  • Модуль in_memory, позволяющий размещать данные в общей памяти Postgres Pro.
  • Модуль jsquery, реализующий специальный язык запросов для эффективного поиска по индексу в структурированных данных JSONB.
  • Служба мониторинга 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_pathman, предоставляющий оптимизированный механизм секционирования, функции для управления секциями, а также декларативный синтаксис. Начиная с Postgres Pro 12, использовать pg_pathman не рекомендуется. Применяйте вместо него реализованное в ванильной версии декларативное секционирование, описанное в Разделе 5.11.
  • Расширение pg_proaudit, позволяющее отслеживать различные события, связанные с безопасностью.
  • Расширение pgpro_anonymizer, позволяющее маскировать или заменять конфиденциальные коммерческие данные или информацию, по которой можно установить личность, в БД Postgres Pro.
  • Расширение pgpro_application_info, которое предназначено для помощи разработчикам в переносе приложений, использующих пакет DBMS_APPLICATION_INFO, из Oracle в Postgres Pro.
  • pg_probackup — менеджер резервного копирования и восстановления.
  • Расширение pgpro_bfile, предоставляющее составной тип bfile и реализующее подобную Oracle технику доступа к внешнему файлу.
  • Утилита pgpro_controldata, показывающая управляющую информацию кластера БД PostgreSQL/Postgres Pro и параметры совместимости кластера и/или сервера.
  • Расширение pgpro_pwr, позволяющее получать отчёты по нагрузке, полезные для выявления наиболее ресурсоёмких операций в базе данных.
  • Расширение pgpro_rp, реализующее функцию приоритизации ресурсов и позволяющее выделять больше ресурсов для сеансов с высоким приоритетом.
  • Модуль pgpro_scheduler, в котором реализованы фоновые исполнители для планируемых задач.
  • Расширение pgpro_stats, которое собирает статистику выполнения SQL-операторов, подсчитывает статистику событий ожидания и предоставляет прочие полезные метрики, которые в PostgreSQL нельзя получить никак иначе. Оно также обеспечивает возможность трассировки сеансов приложений и может создавать представления, эмулирующие другие расширения для сбора статистики.
  • Модуль 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.
  • Модуль rum, предоставляющий индекс RUM на базе GIN.
  • Модуль shared_ispell, позволяющий разместить словари в общей памяти.
  • Экспериментальное расширение sr_plan, позволяющее пользователям сохранять отдельные планы параметризованных запросов для использования в будущем вне зависимости от изменения параметров планировщика.
  • Расширение utl_http, позволяющее получать доступ к данным в Интернете по протоколу HTTP, выполняя HTTP-вызовы из SQL и PL/pgSQL.
  • Расширение utl_mail, предназначенное для управления электронной почтой и включающее часто используемые возможности электронной почты, такие как вложение, копия и скрытая копия.
  • Расширение utl_smtp, предназначенное для отправки электронной почты по протоколу SMTP из PL/pgSQL.
  • Экспериментальный модуль vops, реализующий вертикальную модель данных в Postgres Pro Enterprise. Эта модель позволяет многократно ускорить запросы OLAP с фильтрацией и агрегированием.

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

Важно

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

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