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.)
- Сжатие на уровне страниц. (См. Главу 32.)
- Поддержка автономных транзакций. (См. Главу 16.)
- Уменьшение размера индекса-B-дерева, достигаемое в результате замены повторяющихся ключей одним уникальным значением и списком указателей на него.
- «Отложенное» размещение временных таблиц на диске. Дисковое пространство для временных таблиц выделяется только при переполнении буферов (размером
temp_buffers) и только тогда таблица сохраняется на диске. Так как дисковое пространство для временных таблиц теперь не выделяется сразу, это позволяет значительно сократить нагрузку на диск при работе с ограниченным количеством небольших временных таблиц. - Экспериментальная функциональность приоритизации ресурсов позволяет выделять больше ресурсов более приоритетным сеансам. (См. Подраздел 18.4.6.)
- Автоматическое исправление страниц при потоковой репликации в случае повреждения данных (неиспорченные страницы запрашиваются с ведомого сервера). (См. Подраздел 26.2.5.3.)
- Справедливое распределение лёгких исключительных блокировок после получения заданного количества разделяемых блокировок. (См. описание параметра lwlock_shared_limit.)
- Управление объёмом кеша, который занимают подготовленные операторы. При включении параметра plan_cache_lru_size разобранные деревья запросов и общие планы, которые не использовались в последнее время, вытесняются из кеша при достижении заданного этим параметром ограничения.
- Усовершенствование выбора между последовательным сканированием и сканированием по индексу. (См. описание параметра seq_scan_startup_cost_first_row.)
- Улучшение в libpq обработки подключений с несколькими серверами и перехода от одного к другому. (См. описание параметров hostorder и failover_timeout.)
- Реализация тайм-аута для простаивающих сеансов на стороне сервера. (См. описание параметра idle_session_timeout.)
- Добавление в libpq возможности забыть введённый пароль, что позволяет предотвратить переподключения, когда это требуется политикой безопасности. (См. описание параметра reusepass.)
- Поддержка клиент-серверных соединений с использованием технологии RDMA (Remote Direct Memory Access, Удалённый прямой доступ к памяти). (См. Раздел 18.11.)
- Поддержка вывода времени в pg_waldump.
- Смягчение ограничений синхронной репликации, в результате которого ведущий сервер может продолжать работать при временной недоступности одного из ведомых. (См. описание параметра synchronous_standby_gap.)
- Алгоритм поиска k ближайших соседей (k-NN) для SP-GiST, GiST и B-дерева. (См. Раздел 11.13.)
- Периодическая проверка соединения клиента с сервером во время выполнения запросов, что позволяет обнаруживать разрывы соединений раньше и освобождать ресурсы сервера при отключении клиентов. (См. описание параметра client_connection_check_interval.)
- Улучшенная вариация pgbench, которая учитывает ошибки сериализации и взаимоблокировки в транзакциях, а также поддерживает составные команды.
- Устранено практически достижимое ограничение на число записей в ACL (списках управления доступом, то есть списках назначаемых прав).
- Исправление повреждённых данных WAL из буферов в оперативной памяти.
От Postgres Pro Standard унаследованы следующие усовершенствования:
- Покрывающие индексы. (См. раздел, посвящённый
INCLUDE, в описании CREATE INDEX.) - Улучшенный механизм проверки блокировок, не оказывающий отрицательного влияния на производительность.
- Уменьшенное потребление памяти при обработке сложных запросов со множеством таблиц.
- Добавление времени планирования в информацию, выводимую модулем auto_explain.
- Возможность замены нулевого байта заданным ASCII-символом при загрузке данных с помощью команды
COPY FROM. (См. описание параметра nul_byte_replacement_on_import.) - Использование ICU на всех платформах с целью обеспечить платформонезависимую сортировку для различных локалей. По умолчанию провайдер правил сортировки
icuзадействуется для всех локалей, за исключениемCиPOSIX. (См. Подраздел 23.2.2.) - Реализация механизма PTRACK, позволяющего программе pg_probackup отслеживать изменения страниц при создании инкрементальных резервных копий.
- Согласованное чтение на ведомых серверах. (См. WAITLSN.)
- Изменение параметров в
recovery.confбез перезапуска сервера. - Улучшения редактирования в командной строке с использованием WinEditLine в версии psql для Windows, в том числе поддержка автодополнение в консоли psql и изменение кодировки psql по умолчанию на UTF-8.
- Унифицированная структура пакетов двоичных файлов для всех дистрибутивов Linux, упрощающая миграцию между ними и позволяющая устанавливать несколько различных продуктов на базе PostgreSQL совместно без каких-либо конфликтов. (См. Главу 17.)
Postgres Pro Enterprise также включает следующие дополнительные модули:
- Расширение aqo для адаптивной оптимизации запросов.
- Модуль 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в них. - Пул соединений pgbouncer.
- Модуль pg_hint_plan, управляющий планом выполнения запросов со специальными указаниями для планировщика.
- Модуль pg_pathman, реализующий оптимизированный механизм секционирования и функции для управления секциями, а также декларативный синтаксис.
- pg_probackup — менеджер резервного копирования и восстановления.
- Модуль pgpro_scheduler, в котором реализованы фоновые исполнители для планируемых задач.
- Утилита pgpro_controldata, показывающая управляющую информацию кластера БД PostgreSQL/Postgres Pro и параметры совместимости кластера и/или сервера.
- Модуль pg_query_state, дающий возможность узнавать текущее состояние выполнения запросов в обслуживающем процессе.
- Утилита pg_repack для реорганизации таблиц.
- Модуль pg_transfer, осуществляющий поддержку перемещаемых таблиц.
- Модуль pg_variables, предоставляющий функции для работы с переменными различных типов.
- Модуль pg_tsparser — альтернативный анализатор текстового поиска.
- Расширение pg_wait_sampling, предназначенное для периодического сбора статистики по событиям ожидания. Воспользовавшись этим расширением, вы сможете понять характер активности сервера, в том числе увидеть текущие события ожидания во всех обычных и фоновых рабочих процессах.
- Модуль rum, предоставляющий индекс RUM на базе GIN.
- Модуль plantuner, добавляющий поддержку указаний для планировщика, подключающих или отключающих определённые индексы при выполнении запроса.
- Модуль shared_ispell, позволяющий разместить словари в общей памяти.
- Модуль sr_plan, позволяющий сохранять и восстанавливать планы запросов.
- Экспериментальный модуль vops, реализующий вертикальную модель данных в Postgres Pro Enterprise. Эта модель позволяет многократно ускорить запросы OLAP с фильтрацией и агрегированием.
Выпуски 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/products/postgrespro/eula. 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 32.)
- Support for autonomous transactions. (See Chapter 16.)
- Reduced B-tree index size, which is achieved by storing duplicate keys only once, with item pointers located in posting lists.
- 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 configuration parameter 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.)
- Timeout for idle sessions on the server side. (See idle_session_timeout parameter description.)
- Enabling libpq to forget the entered password, which allows to prevent reconnections when required by a security policy. (See reusepass parameter description.)
- Support for client/server connections using remote direct memory access (RDMA) technology. (See Section 18.11.)
- 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.)
- K-nearest neighbors (k-NN) algorithm for B-tree, GiST, and SP-GiST index types. (See Section 11.13.)
- Periodic verification of client-server connection during query execution, which allows to detect broken connections earlier and free server resources upon disconnection. (See client_connection_check_interval parameter description.)
- 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).
- Restoration of corrupted WAL data from in-memory WAL buffers.
The following enhancements are inherited from Postgres Pro Standard:
- Covering indexes. (See the
INCLUDEdescription in CREATE INDEX.) - Improved deadlock detection mechanism that does not cause performance degradation.
- 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 FROMcommand. (See nul_byte_replacement_on_import parameter description.) - ICU collation support on all platforms to provide platform-independent sort for various locales. By default, the
icucollation provider is used for all locales exceptCandPOSIX. (See Section 23.2.2.) - PTRACK implementation, which enables pg_probackup to track page changes on the fly when creating incremental backups.
- Consistent reads on standby servers. (See WAITLSN.)
- Changing parameters in
recovery.confwithout restarting the server. - 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 to install different PostgreSQL-based products side by side, without any conflicts. (See Chapter 17.)
Postgres Pro Enterprise also includes the following additional modules:
- aqo extension for adaptive query optimization.
- 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_classsize. - 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,DELETEorSELECT INTOoperations applied for affected tables. - pgbouncer connection pooler.
- pg_hint_plan module that controls the execution plan by providing hints to the planner.
- pg_pathman module that provides optimized partitioning mechanism and functions to manage partitions, as well as declarative syntax.
- pg_probackup, a backup and recovery manager.
- pgpro_scheduler module that provides background workers for task scheduling.
- 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_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_variables module that provides functions for working with variables of various types.
- pg_tsparser module, which is an alternative text search parser.
- 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.
- rum module that provides RUM index based on GIN.
- plantuner module that provides hints for the planner to disable or enable indexes for query execution.
- shared_ispell module that enables storing dictionaries in shared memory.
- sr_plan module that allows to save and restore query plans.
- vops experimental module that provides a vertical data model for Postgres Pro Enterprise. It can speed up OLAP queries with filtering and aggregation by times.
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.