PostgreSQL
PostgreSQL — свободная объектно-реляционная система управления базами данных
PostgreSQL — это свободно распространяемая объектно-реляционная система управления базами данных (ORDBMS), наиболее развитая из открытых СУБД в мире и являющаяся реальной альтернативой коммерческим базам данных.
Особенности PostgreSQL
- Поддержка распараллеливания операций последовательного сканирования записей (Sequential Scan), слияния запросов (join) и агрегирования данных. При распараллеливании операция разбивается на части и каждая часть разбирается отдельным обработчиком, после чего результаты работы каждого обработчика объединяются, что позволяет существенно увеличить скорость обработки запроса на системах с большим числом процессорных ядер.
- Режим синхронной репликации «synchronous_commit = remote_apply», при котором основной узел перед закрытием транзакции ожидает подтверждения применения данных на standby-узле, что позволяет обеспечить непротиворечивость операций чтения из БД в любой части кластера.
- Возможность создания кластерных конфигураций, включающих несколько запасных узлов, реплицируемых в синхронном режиме. Данная возможность может применяться для создания нескольких полностью идентичных узлов для балансировки нагрузки.
- В модуль postgres_fdw, позволяющий логически объединить содержимое БД с нескольких серверов, добавлена поддержка операций слияния (join) и сортировки запросов, а также выполнения операций UPDATE и DELETE на внешнем сервере. В том числе модуль может применяться для первичной обработки запросов в PostgreSQL с трансляцией запросов на внешние БД, которые могут обслуживаться другими СУБД.
- API для создания «горячих» бэкапов, в котором метка резервной копии не записывается в директорию с данными, а возвращается как результат выполнения функции pg_stop_backup(), что позволяет защититься от проблем в случае краха во время бэкапа.
- Снижено негативное влияние на работу больших таблиц операции «autovacuum», благодаря исключению операций повторной заморозки («refreezing») старых данных.
- Реализована подсистема для отображения прогресса выполнения операций, например, организовано информирование о времени до завершения VACUUM.
- В систему полнотекстового поиска добавлены средства поиска фраз, реализованные через новый оператор ‹-› или ‹DISTANCE›, определяющий расстояние между словами (например, можно осуществить выборку фраз, в которых слово «А» отделено от «B» заданным числом слов). Совместно с новыми опциями гибкой настройки поиска, новая возможность может применяться для создания гибридных систем поиска, объединяющих поиск по реляционным данным, JSON и полнотекстовым индексам.
- Добавлены системные представления и функции: pg_stat_wal_receiver, pg_visibility, pg_config, pg_blocking_pids, g_notification_queue_usage.
- При установке дополнений теперь поддерживается каскадная установка зависимостей.
- В модуле pg_basebackup появилась поддержка распараллеливания операций и слотов репликации.
- В утилиту psql добавлены команды \ev и \sv для редактирования представлений. Реализована возможность указания нескольких экземпляров опций «-c» и «-f». Добавлен режим \crosstabview для отображения результатов запроса в виде сетки, по аналогии с электронными таблицами.
- Добавлен отладочный модуль pg_visibility, предоставляющий средства для изучения карты видимости (Visibility Map, отслеживает какие элементы видны для всех активных транзакций).
- Поддержка выражения «ALTER TABLE ADD COLUMN … IF NOT EXISTS» для добавления столбца только при его отсутствии в таблице.
- Возможность создавать GIN-индексы с любым значением maintenance_work_mem.
- Системное представление pg_config, отражающее параметры сборки СУБД.
- Нет ограничений на максимальный размер базы данных.
- Нет ограничений на количество записей в таблице.
- Нет ограничений на количество индексов в таблице.
- Максимальный размер таблицы — 32 Тбайт.
- Максимальный размер записи — 1,6 Тбайт.
- Максимальный размер поля — 1 Гбайт.
- Максимум полей в записи250—1600 (в зависимости от типов полей).
Возможности PostgreSQL
- Функции в PostgreSQL являются блоками кода, исполняемыми на сервере, а не на клиенте БД. Хотя они могут писаться на чистом SQL, реализация дополнительной логики, например, условных переходов и циклов, выходит за рамки собственно SQL и требует использования некоторых языковых расширений. Функции могут писаться с использованием различных языков программирования. PostgreSQL допускает использование функций, возвращающих набор записей, который далее можно использовать так же, как и результат выполнения обычного запроса. Функции могут выполняться как с правами их создателя, так и с правами текущего пользователя. Иногда функции отождествляются с хранимыми процедурами, однако между этими понятиями есть различие.
- Триггеры в PostgreSQL определяются как функции, инициируемые DML-операциями. Например, операция INSERT может запускать триггер, проверяющий добавленную запись на соответствия определённым условиям. При написании функций для триггеров могут использоваться различные языки программирования. Триггеры ассоциируются с таблицами. Множественные триггеры выполняются в алфавитном порядке.
- Механизм правил в PostgreSQL представляет собой механизм создания пользовательских обработчиков не только DML-операций, но и операции выборки. Основное отличие от механизма триггеров заключается в том, что правила срабатывают на этапе разбора запроса, до выбора оптимального плана выполнения и самого процесса выполнения. Правила позволяют переопределять поведение системы при выполнении SQL-операции к таблице.
- Индексы в PostgreSQL следующих типов: B-дерево, хэш, R-дерево, GiST, GIN. При необходимости можно создавать новые типы индексов, хотя это далеко не тривиальный процесс.
- Многоверсионность поддерживается в PostgreSQL — возможна одновременнуя модификация БД несколькими пользователями с помощью механизма Multiversion Concurrency Control (MVCC). Благодаря этому соблюдаются требования ACID, и практически отпадает нужда в блокировках чтения.
- Расширение PostgreSQL для собственных нужд возможно практически в любом аспекте. Есть возможность добавлять собственные преобразования типов, типы данных, домены (пользовательские типы с изначально наложенными ограничениями), функции (включая агрегатные), индексы, операторы (включая переопределение уже существующих) и процедурные языки.
- Наследование в PostgreSQL реализовано на уровне таблиц. Таблицы могут наследовать характеристики и наборы полей от других таблиц (родительских). При этом данные, добавленные в порождённую таблицу, автоматически будут участвовать (если это не указано отдельно) в запросах к родительской таблице.
Преимущества PostgreSQL
- Поддержка БД неограниченного размера;
- Мощные и надёжные механизмы транзакций и репликации;
- Расширяемая система встроенных языков программирования и поддержка загрузки C-совместимых модулей;
- Наследование;
- Легкая расширяемость.
Отзывы
Отзывов пока нет.