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) и только тогда таблица сохраняется на диске. Так как дисковое пространство для временных таблиц теперь не выделяется сразу, это позволяет значительно сократить нагрузку на диск при работе с ограниченным количеством небольших временных таблиц.
  • Экспериментальная функциональность приоритизации ресурсов позволяет выделять больше ресурсов более приоритетным сеансам. (См. Подраздел 18.4.6.)
  • Автоматическое исправление страниц при потоковой репликации в случае повреждения данных (неиспорченные страницы запрашиваются с ведомого сервера). (См. Подраздел 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.)
  • Улучшенная вариация pgbench, которая учитывает ошибки сериализации и взаимоблокировки в транзакциях, а также поддерживает составные команды.
  • Устранено практически достижимое ограничение на число записей в ACL (списках управления доступом), связанных с таблицами и индексами.
  • Представление pgpro_stat_wal_activity, показывающее объём файлов WAL, который генерирует каждый процесс.
  • Исправление повреждённых данных WAL из буферов в оперативной памяти.
  • Проверка уникальных ограничений в индексах-B-деревьях, выполняемая модулем amcheck.
  • Исключение дубликатов блокировок, благодаря которому обеспечивается эффективное хранение в памяти и отслеживание всех исключительных блокировок, удерживаемых процессом запуска резервного сервера во время воспроизведения WAL.
  • Оптимизированный механизм для работы с метаданными таблиц, который позволяет получать информацию об атрибутах с использованием системного кеша вместо прямого чтения из системного каталога.

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

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

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

  • Использование ICU на всех платформах с целью обеспечить платформонезависимую сортировку для различных локалей. По умолчанию провайдер правил сортировки icu задействуется для всех локалей, за исключением C и POSIX. (См. Подраздел 23.2.2.)
  • Реализация механизма PTRACK, позволяющего программе pg_probackup отслеживать изменения страниц при создании инкрементальных резервных копий.
  • Поддержка чтения файлов pg_control предыдущих версий PostgreSQL/Postgres Pro утилитой pgpro_controldata.
  • Проверка совместимости кластера, позволяющая определить, совместима ли текущая версия Postgres Pro с определённым кластером, и понять, какие параметры влияют на совместимость, не запуская сервер. (См. описание параметра postgres -Z и описание pgpro_controldata.)
  • Улучшения редактирования в командной строке с использованием WinEditLine в версии psql для Windows, в том числе поддержка автодополнение в консоли psql и изменение кодировки psql по умолчанию на UTF-8.
  • Унифицированная структура пакетов двоичных файлов для всех дистрибутивов Linux, упрощающая миграцию между ними и позволяющая устанавливать продукты на базе PostgreSQL совместно без каких-либо конфликтов. (См. Главу 17.)
  • Журнал операций, в котором хранится информация о критически важных системных событиях, таких как обновление, выполнение pg_resetwal и тому подобное. Эта информация важна для осуществления технической поддержки со стороны поставщика. Запись в журнал операций производится только на системном уровне, а для его чтения используются функции SQL. (См. Подраздел 9.27.12.)
  • Расширенные политики аутентификации, обеспечивающие эффективное управление паролями и контроль доступа. (См. CREATE PROFILE и ALTER ROLE).
  • Встроенные механизмы защиты данных, которые позволяют стерилизовать объекты, перед удалением заполняя их нулями. Обнуление объектов может производиться перед удалением файлов на диске и перед удалением устаревших версий строк (очисткой страниц), освобождением ОЗУ и удалением или перезаписью файлов WAL. (Только сертифицированная редакция.)
  • Сбор статистики очистки таблиц и индексов. Собранная информация отображается расширениями pgpro_stats и pgpro_pwr.
  • Сбор информации о сбоях сервера, который включается параметром конфигурации crash_info и находится под управлением нескольких параметров, включая этот.
  • Оптимизированное потребление памяти при оценке избирательности для каждого элемента массива.

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

  • Расширение apache_age, добавляющее в Postgres Pro функциональность для работы с графовыми базами данных.
  • Расширение aqo для адаптивной оптимизации запросов.
  • Модуль auto_dump для сбора данных по длительным и проблемным запросам и последующего воспроизведения этих запросов с целью устранения неполадок.
  • Расширение daterange_inclusive, позволяющее добавлять в вывод верхнюю границу временного диапазона.
  • Модуль dump_stat, позволяющий сохранять статистику данных при резервном копировании и восстановлении.
  • Модуль fasttrun, который предоставляет транзакционно-небезопасную функцию для усечения временных таблиц, что предотвращает разрастание каталога pg_class.
  • Модуль fulleq, предоставляющий дополнительный оператор равенства для совместимости с Microsoft SQL Server.
  • Модуль hunspell-dict, предоставляющий словари для ряда языков.
  • Модуль 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_failover_slots для автоматического создания и синхронизации слотов логической репликации на физических репликах.
  • Модуль pg_hint_plan, управляющий планом выполнения запросов со специальными указаниями для планировщика.
  • Модуль pg_integrity_check, осуществляющий вычисление и проверку контрольных сумм отслеживаемых файлов. (Только сертифицированная редакция.)
  • Модуль pg_pathman, предоставляющий оптимизированный механизм секционирования, функции для управления секциями, а также декларативный синтаксис. Начиная с Postgres Pro 12, использовать pg_pathman не рекомендуется. Применяйте вместо него реализованное в ванильной версии декларативное секционирование, описанное в Разделе 5.11.
  • Расширение pg_proaudit, позволяющее отслеживать различные события, связанные с безопасностью.
  • Расширение pg_trgm_mchar, обеспечивающее быстрый поиск схожих строк типов mchar и mvarchar на основе триграмм. Это расширение полезно для 1C.
  • pg_probackup — менеджер резервного копирования и восстановления.
  • Решение pg_probackup3 для резервного копирования и восстановления кластеров баз данных Postgres Pro.
  • Утилита pgpro_controldata, показывающая управляющую информацию кластера БД PostgreSQL/Postgres Pro и параметры совместимости кластера и/или сервера.
  • Расширение pgpro_cpumeter, которое предоставляет доступ к новой системной функции мониторинга использования процессора. Функция pgpro_cpumeter непрерывно собирает и записывает информацию о ядрах процессора, используемых процессами сервера Postgres Pro.
  • Утилита pgpro_datactl для управления файлами данных Postgres Pro, которая включает в себя модуль распаковки и анализа файлов CFS.
  • Расширение pgpro_pwr, позволяющее получать отчёты по нагрузке, полезные для выявления наиболее ресурсоёмких операций в базе данных.
  • Модуль pgpro_scheduler, в котором реализованы фоновые исполнители для планируемых задач.
  • Расширение pgpro_stats, которое собирает статистику выполнения SQL-операторов, подсчитывает статистику событий ожидания и предоставляет прочие полезные метрики, которые в PostgreSQL нельзя получить никак иначе. Оно также обеспечивает возможность трассировки сеансов приложений и может создавать представления, эмулирующие другие расширения для сбора статистики.
  • Утилита pgpro_tune для автоматической настройки параметров конфигурации Postgres Pro. Она предоставляет набор встроенных пресетов, включая пресет для настройки, специфичной для 1С.
  • Модуль pg_query_state, дающий возможность узнавать текущее состояние выполнения запросов в обслуживающем процессе.
  • Утилита pg_repack для реорганизации таблиц.
  • Модуль pg_transfer, осуществляющий поддержку перемещаемых таблиц.
  • Модуль pg_tsparser — альтернативный анализатор текстового поиска.
  • Модуль pg_variables, предоставляющий функции для работы с переменными различных типов. Для облегчения миграции кода Oracle, обрабатывающего коллекции, доступны следующие виды функций: функции, позволяющие работать с общими переменными-коллекциями, к элементам которых можно получить доступ по ключу, имеющему целочисленный или текстовый тип; функции, обеспечивающие функциональность итератора для любых коллекций.
  • Расширение pg_wait_sampling, предназначенное для периодического сбора статистики по событиям ожидания. Воспользовавшись этим расширением, вы сможете понять характер активности сервера, в том числе увидеть текущие события ожидания во всех обычных и фоновых рабочих процессах.
  • Модуль plantuner, добавляющий поддержку указаний для планировщика, подключающих или отключающих определённые индексы при выполнении запроса.
  • Модуль rum, предоставляющий индекс RUM на базе GIN.
  • Модуль shared_ispell, позволяющий разместить словари в общей памяти.

Выпуски 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.)
  • 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.
  • Resource prioritization experimental feature, which allows to allocate more resources to high-priority sessions. (See Section 18.4.6.)
  • 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 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.)
  • Built-in connection pooler that can limit the number of backends when working with multiple clients, without imposing restrictions on using session configuration parameters, prepared statements, or temporary tables. (See Chapter 34 for details.)
  • 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.27.1.)
  • K-nearest neighbors (k-NN) algorithm for B-tree indexes. (See Section 11.13.)
  • An improved version of pgbench that handles transactions with serialization or deadlock errors, as well as supports compound commands.
  • 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.
  • Lock deduplication that allows to effectively store in memory and track all exclusive locks held by a standby server's startup process during WAL replay.
  • 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.

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.)

  • ICU collation support on all platforms to provide platform-independent sort for various locales. By default, the icu collation provider is used for all locales except C and POSIX. (See Section 23.2.2.)
  • 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.)
  • Improvements for command-line editing using WinEditLine in the Windows version of psql, including autocomplete support in psql console and changing the psql default encoding to UTF-8.
  • 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.27.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.)
  • Collection of statistics about vacuuming tables and indexes. The collected information is displayed by pgpro_stats and pgpro_pwr.
  • 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.

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.
  • daterange_inclusive extension, which allows you to include the upper bound of a time range in the output.
  • 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.
  • 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.
  • 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.
  • pg_failover_slots extension for automatic creation and synchronization of logical replication slots on physical replicas.
  • 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_pathman module that provides optimized partitioning mechanism and functions to manage partitions, as well as declarative syntax. Starting from Postgres Pro 12, using pg_pathman is not recommended. Use vanilla declarative partitioning instead, as described in Section 5.11.
  • pg_proaudit extension that enables detailed logging of various security events.
  • pg_trgm_mchar extension that allows fast trigram-based search for similar mchar and mvarchar strings. This extension is useful for 1C.
  • pg_probackup, a backup and recovery manager.
  • pg_probackup3 solution for backup and recovery of Postgres Pro database clusters.
  • pgpro_controldata, an application to display control information of a PostgreSQL/Postgres Pro database cluster and compatibility information for a cluster and/or server.
  • 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_pwr extension that enables you to generate workload reports, which help to discover most resource-intensive activities in your database.
  • pgpro_scheduler module that provides background workers for task scheduling.
  • 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_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.
  • 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.
  • 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.
  • rum module that provides RUM index based on GIN.
  • shared_ispell module that enables storing dictionaries in shared memory.

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