PostgreSQL СУБД
 

PostgreSQL СУБД

Продукт
Разработчики: PostgreSQL Global Development Group
Дата последнего релиза: 2016/09/29
Технологии: СУБД

Содержание

Свободная объектно-реляционная система управления базами данных (СУБД), является свободной альтернативой коммерческим СУБД (таким как Oracle Database, Microsoft SQL Server, IBM DB2, Informix и СУБД производства Sybase) вместе с другими свободными СУБД (такими как MySQL и Firebird). Существует в реализациях для следующих платформ: Linux, Solaris/OpenSolaris, Win32, Mac OS X, FreeBSD, QNX 4.25, QNX 6.

Большой вклад в развитие PostgreSQL внесли российские разработчики. Среди них можно выделить Вадима Михеева, Олега Бартунова, Федора Сигаева, Александра Короткова.

Крупнейшим вендором, оказывающим услуги доработки и внедрения Postgres, является американская компания EnterpriseDB. В России по аналогичной модели с января 2015 года развивается компания "Постгрес профессиональный (Postgres Professional)", предоставляющая услуги по поддержке, обучению, разработке, консалтингу.

Основная статья: Продукт:PostgreSQL_(PostgresPro)

Функции

Функции являются блоками кода, исполняемыми на сервере, а не на клиенте БД. Хотя они могут писаться на чистом SQL, реализация дополнительной логики, например, условных переходов и циклов, выходит за рамки собственно SQL и требует использования некоторых языковых расширений. Функции могут писаться с использованием одного из следующих языков:

  • Встроенный процедурный язык PL/pgSQL, во многом аналогичный языку PL/SQL, используемому в СУБД Oracle;
  • Скриптовые языки — PL/Lua, PL/LOLCODE, PL/Perl, plPHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl и PL/Scheme;
  • Классические языки — C, C++, Java (через модуль PL/Java);
  • Статистический язык R (через модуль PL/R).

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

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


Триггеры

Триггеры определяются как функции, инициируемые DML—операциями. Например, операция INSERT может запускать триггер, проверяющий добавленную запись на соответствия определённым условиям. При написании функций для триггеров могут использоваться различные языки программирования.

Триггеры ассоциируются с таблицами. Множественные триггеры выполняются в алфавитном порядке.


Правила и представления

Механизм правил (англ. rules) представляет собой механизм создания пользовательских обработчиков не только DML-операций, но и операции выборки. Основное отличие от механизма триггеров заключается в том, что правила срабатывают на этапе разбора запроса, до выбора оптимального плана выполнения и самого процесса выполнения. Правила позволяют переопределять поведение системы при выполнении SQL-операции к таблице. Хорошим примером является реализация механизма представлений (англ. views): при создании представления создается правило, которое определяет, что вместо выполнения операции выборки к представлению система должна выполнять операцию выборки к базовой таблице/таблицам с учетом условий выборки, лежащих в основе определения представления. Для создания представлений, поддерживающих операции обновления, правила для операций вставки, изменения и удаления строк должны быть определены пользователем.


Индексы

В PostgreSQL имеется поддержка индексов следующих типов: B-дерево, хэш, R-дерево, GiST, GIN. При необходимости можно создавать новые типы индексов, хотя это далеко не тривиальный процесс. Индексы в PostgreSQL обладают следующими свойствами:

  • возможен просмотр индекса не только в прямом, но и в обратном порядке — создание отдельного индекса для работы конструкции ORDER BY ... DESC не нужно;
  • возможно создание индекса над несколькими столбцами таблицы, в том числе над столбцами различных типов данных;
  • индексы могут быть функциональными, то есть строиться не на базе набора значений некоего столбца/столбцов, а на базе набора значений функции от набора значений;
  • индексы могут быть частичными, то есть строиться только по части таблицы (по некоторой её проекции); в некоторых случаях это помогает создавать намного более компактные индексы или достигать улучшения производительности за счёт использования разных типов индексов для разных (например, с точки зрения частоты обновления) частей таблицы;
  • планировщик запросов может использовать несколько индексов одновременно для выполнения сложных запросов.


Многоверсионность (MVCC)

PostgreSQL поддерживает одновременную модификацию БД несколькими пользователями с помощью механизма Multiversion Concurrency Control (MVCC). Благодаря этому соблюдаются требования ACID и практически отпадает нужда в блокировках чтения.


Полнотекстовый поиск

PostgreSQL обладает встроенной системой полнотекстового поиска, позволяющей искать внутри базы данных документы и сортировать их в заданном порядке. Основными преимуществами использования встроенного полнотекстового поиска являются: тесная интеграция с СУБД(транзакционность, одновременный доступ, восстановление после сбоев), масштабируемость, широкие возможности настройки (словари, парсеры, и т.д.).

Геоинформационные системы

PostGIS - расширение СУБД PostgreSQL предназначенное для хранения в базе географических данных. PostGIS включает поддержку пространственных индексов R-Tree/GiST и функции обработки геоданных.

2017: Интеграция с Ethereum

14 сентября 2017 года российская компания Postgres Professional объявила о создании прототипа расширения Posthereum для интеграции полнофункциональной СУБД PostgreSQL с блокчейн-платформой Ethereum, предназначенной для регистрации сделок с любыми видами активов на основе системы «умных контрактов». По замыслу компании, крупные российские банки, корпорации и госструктуры, работающие с СУБД PostgreSQL, с помощью данной разработки смогут объединить базы данных с блокчейн-приложениями на основе Ethereum. Подробнее здесь.

2016

PostgreSQL 9.6

29 сентября 2016 года сообщество разработчиков представило стабильную ветку СУБД PostgreSQL 9.6. Обновления для нее 9.6 будут выходить в течение пяти лет, до сентября 2021 года.

Логотип версии PostgreSQL 9.6, (2016)


Основные дополнения

  • поддержка распараллеливания операций последовательного сканирования записей (Sequential Scan), слияния запросов (join) и агрегирования данных. При распараллеливании операция разбивается на части и каждая часть разбирается отдельным обработчиком, после чего результаты работы каждого обработчика объединяются, что позволяет существенно увеличить скорость обработки запроса на системах с большим числом процессорных ядер. Выигрыш заметен для ресурсоёмких запросов, таких как сопоставление по регулярным выражениям. Например, в текстах при включении распараллеливания некоторые запросы выполняются до 32 раз быстрее[1].
  • режим синхронной репликации "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, отражающее параметры сборки СУБД;

Сравнение Tibero и PostgreSQL

Корректирующий выпуск всех веток

11 февраля 2016 года сообщество разработчиков PostgreSQL сообщило о выпуске корректирующих обновлений для всех поддерживаемых веток PostgreSQL: 9.5.1, 9.4.6, 9.3.11, 9.2.15 и 9.1.20, в которых устранены две уязвимости, представлена порция исправлений ошибок, добавлена поддержка Python 3.5 в PL/Python и обеспечена возможность совместного использования Python2 и Python3 в одной БД[2].

Поддержка ветки 9.0.x прекращена. Выпуск обновлений для ветки:

  • 9.1 продлен до сентября 2016 года.
  • 9.2 продлен до сентября 2017 года,
  • 9.3 продлен до сентября 2018 года,
  • 9.4 продлен до декабря 2019 года,
  • 9.5 продлен до января 2021 года.

Первая из уязвимостей (CVE-2016-0773) проявляется в движке обработки регулярных выражений и может привести к краху бэкенда при разборе регулярных выражений с символами вне диапазона Unicode (проблеме подвержены системы, в которых пользовательский ввод применяется для генерации регулярного выражения).

Вторая уязвимость (CVE-2016-0766) присутствует в движке PL/Java и позволяет повысить свои привилегии при работе с БД.

PostgreSQL 9.5

7 января 2016 года стало известно о выходе стабильной ветки СУБД PostgreSQL 9.5. Выпуск обновлений для ветки 9.5 будет поддерживаться до января 2021 года[3].

Изменения

  • Функциональность "UPSERT" (добавить-или-модифицировать), реализованная через новое выражение "INSERT ... ON CONFLICT DO NOTHING/UPDATE", позволяющая обработать ситуацию невозможности добавления данных через "INSERT", например, из-за нарушения условий уникальности или недопустимости значения одного из полей. Вместо вывода ошибки теперь можно игнорировать выполнение оператора или изменить связанные с ключевым полем данные (т.е. если запись уже существует, вместо INSERT выполнить UPDATE);
  • Ограничение доступа на уровне строк (Row-Level Security, RLS). Доступ пользователей к данным в таблице теперь можно разграничивать на уровне отдельных строк, например, можно запретить определённой категории пользователей просмотр строк, в которых хранятся данные, добавленные другим пользователем. Для активации RLS следует использовать директиву "ALTER TABLE tablename ENABLE ROW LEVEL SECURITY", после чего следует задать правила доступа при помощи выражения "CREATE POLICY";
  • BRIN-индексы ("индексы блоковых зон", Block Range Index), позволяющие сверхкомпактно индексировать очень большие таблицы, без применения традиционных B-деревьев. Суть BRIN-индексов сводится к разбиению общего индекса на блоки, каждый из которых содержит данные индекса только для определённого диапазона значений. В тесте подобный метод оказался примерно в два раза медленнее b-деревьев при осуществлении операций выборки данных, но в 3-4 раза быстрее при создании и обновлении индекса, а также занял значительно меньше места на диске (64 Кб против 28 Мб);
  • Новые функции и операторы для типа данных JSONB. Для изменения значений в документе JSONB теперь можно обойтись без извлечения и переопределения всего документа, благодаря появлению функции jsonb_set(). Также добавлены функции json_strip_nulls (удаление атрибутов, содержащих значения NULL) и jsonb_pretty (вывод в отформатированном JSON). Добавлен оператор "||" для соединения двух значений JSONB;
  • Инструмент pg_rewind, позволяющий существенно упростить процесс восстановления отказоустойчивых конфигураций после переключения на резервный сервер. После возвращения в строй основного сервера возникает задача синхронизации его состояния с продолжившим работу запасным сервером, который успел накопить свою порцию изменений. Утилита pg_rewind пытается восстановить состояние первичного сервера по WAL-логу транзакций, перебирая их начиная с момента незадолго до сбоя, определяя изменённые данные и перенося только изменившиеся блоки, что позволяет обойтись без восстановления полной копии с работающего резервного сервера.
  • Значительно оптимизированы скорости сортировки и хэширования в памяти. Благодаря применению нового метода сортировки строковых значений и чисел, удалось до 20 раз увеличить скорость создания индексов, а время выполнения запросов требующих сортировки больших объёмов данных, сократить в 2-12 раз;
  • Добавлена поддержка выражения TABLESAMPLE, позволяющего сформировать выборку над неполным объёмом данных из больших таблиц, без выполнения ресурсоёмких операций сортировки над всей таблицей. Например, запрос "SELECT * FROM test TABLESAMPLE SYSTEM(10)" сформирует вывод, охватив только 10% от таблицы test. Доступно несколько алгоритмов отсеивания значений в процессе неполной выборки;
  • Улучшено масштабирование на системах с большим количеством процессорных ядер и оперативной памяти. Например, на системе с 24 ядрами CPU и 496 Гб ОЗУ в тесте EnterpriseDB при нагрузке в 64 одновременных соединения PostgreSQL 9.5 показал прирост производительности в 96% по сравнению с PostgreSQL 9.4;
  • Автоматизировано управление размером лога транзакций. Возможность исключения отражения таблиц в логе транзакций (ALTER TABLE ... SET LOGGED / UNLOGGED);
  • Аналитические возможности "GROUPING SETS", "CUBE" и "ROLLUP", позволяющие формировать вывод с группировкой по набору полей и рассчитывать число комбинаций различных категорий;
  • Улучшена репликация и средства повышения отказоустойчивости. Добавлен механизм отслеживания состояния выполнения репликации, в том числе реализованы методы для определения причины возникновения отдельных изменений в процессе выполнения логической репликации;
  • Произведены множественные улучшения в механизме Foreign Data Wrappers, включая выражение "IMPORT FOREIGN SCHEMA", которое позволяет автоматизировать импорт всех связанных внешних таблиц для существующих таблиц с выбранной меткой сервера. Кроме того, обеспечена возможность наследования внешних таблиц в локальных таблицах и наоборот, например, "CREATE local_customers () inherits (remote.customers);"
  • В утилиту vacuumdb добавлена опция "-j", позволяющая запускать VACUUM в несколько одновременно выполняемых потоков.

2015

Инфраструктура параллельных вычислений в PostgreSQL

4 мая 2015 года стало известно о принятии изменений в дерево исходных текстов СУБД PostgreSQL с реализацией инфраструктуры для параллельных вычислений[4].

Она предоставляет:

  • Удобные процедуры для координирования запуска и завершения работы параллельно выполняемых рабочих процессов;
  • Синхронизация различных внутренних состояний (GUCs, комбинированный маппинг CID, снапшоты транзакций) между лидером группы параллельных работ и непосредственно распараллеленными рабочими процессами;
  • Ограничение вызова различных операций, которые могут привести к внесению некорректных изменений в условиях активного распараллеливания;
  • Доставка уведомлений клиенту через сообщения ErrorResponse, NoticeResponse и NotifyResponse от работающих в параллельном режиме обработчиков.

Postgres-XL на EcoServer - альтернатива для ЦОД

13 августа 2015 года стало известно о завершении испытаний системы управления базами данных Postgres-XL на серверах линейки EcoServer.

Postgres-XL – СУБД с открытым кодом для анализа большого объема данных, используемое в банковской сфере и бизнес-аналитике. Запуск СУБД Postgres-XL на серверах «Рикор», по мнению руководства компании Рикор, дает возможность российским заказчикам - использовать программное решение обработки информации на доступной отечественной аппаратной платформе и тем снизить зависимость от импортных ИТ-решений.

«Адаптация свободного ПО к нуждам российских компаний – это та ниша, в которой могут успешно трудиться отечественные ИТ-разработчики, – отметил Борис Иванов, вице-президент «Рикор». – Наше программно-аппаратное решение, состоящее из энергоэффективного сервера EcoServer и СУБД Postgres-XL является отличной альтернативой для использования различными отечественными организациями, в том числе в банковской сфере, которые ранее использовали дорогостоящее ПО для управления базами данных от зарубежных вендоров».

СУБД Postgres-XL ориентирована на создание кластерных систем обработки транзакций в реальном времени, работы с крупными базами для анализа больших наборов данных. Код Postgres-XL распространяется по свободной лицензии Mozilla. Оптимизация процессов в Postgres-XL происходит путем горизонтального масштабирования и массовых параллельных вычислений.

PostgreSQL 9.5 Анонс бета-версии

8 октября 2015 года сообщество разработчиков СУБД PostgreSQL представило бета-версию СУБД PostgreSQL 9.5.

Среди изменений в данной версии:

  • Функциональность "UPSERT" (добавить-или-модифицировать), реализованная через новое выражение "INSERT ... ON CONFLICT DO NOTHING/UPDATE", позволяющая обработать ситуацию невозможности добавления данных через "INSERT", например, из-за нарушения условий уникальности или недопустимости значения одного из полей. Вместо вывода ошибки теперь можно игнорировать выполнение оператора или изменить связанные с ключевым полем данные (т.е. если запись уже существует, вместо INSERT выполнить UPDATE);
  • BRIN-индексы ("индексы блоковых зон", Block Range Index), позволяющие сверхкомпактно индексировать очень большие таблицы, без применения традиционных B-деревьев. Суть BRIN-индексов сводится к разбиению общего индекса на блоки, каждый из которых содержит данные индекса только для определённого диапазона значений. В тесте подобный метод оказался примерно в два раза медленнее b-деревьев при осуществлении операций выборки данных, но в 3-4 раза быстрее при создании и обновлении индекса, а также занял значительно меньше места на диске (64 Кб против 28 Мб);
  • Ограничение доступа на уровне строк (Row-Level Security, RLS). Доступ пользователей к данным в таблице теперь можно разграничивать на уровне отдельных строк, например, можно запретить определённой категории пользователей просмотр строк, в которых хранятся данные, добавленные другим пользователем. Для активации RLS следует использовать директиву "ALTER TABLE tablename ENABLE ROW LEVEL SECURITY", после чего следует задать правила доступа при помощи выражения "CREATE POLICY";
  • Новые функции и операторы для типа данных JSONB. Для изменения значений в документе JSONB теперь можно обойтись без извлечения и переопределения всего документа, благодаря появлению функции jsonb_set(). Также добавлены функции json_strip_nulls (удаление атрибутов, содержащих значения NULL) и jsonb_pretty (вывод в отформатированном JSON). Добавлен оператор "||" для соединения двух значений JSONB;
  • Инструмент pg_rewind, позволяющий существенно упростить процесс восстановления отказоустойчивых конфигураций после переключения на резервный сервер. После возвращения в строй основного сервера возникает задача синхронизации его состояния с продолжившим работу запасным сервером, который успел накопить свою порцию изменений. Утилита pg_rewind пытается восстановить состояние первичного сервера по WAL-логу транзакций, перебирая их начиная с момента незадолго до сбоя, определяя изменённые данные и перенося только изменившиеся блоки, что позволяет обойтись без восстановления полной копии с работающего резервного сервера.
  • Существенные оптимизации скорости сортировки и хэширования в памяти. Благодаря применению нового метода сортировки строковых значений и чисел, удалось увеличить скорость индексации в три раза;
  • Автоматизированное управление размером лога транзакций. Возможность исключения отражения таблиц в логе транзакций (ALTER TABLE ... SET LOGGED / UNLOGGED);
  • Аналитические возможности "GROUPING SETS", "CUBE" и "ROLLUP", позволяющие формировать вывод с группировкой по набору полей и рассчитывать число комбинаций различных категорий;
  • Улучшения репликации и средств повышения отказоустойчивости;
  • Множественные улучшения в механизме Foreign Data Wrappers, включая выражение "IMPORT FOREIGN SCHEMA", которое позволяет автоматизировать импорт всех связанных внешних таблиц для уже существующих таблиц с выбранной меткой сервера. Кроме того, обеспечена возможность наследования внешних таблиц в локальных таблицах и наоборот, например, "CREATE local_customers () inherits (remote.customers);"
  • В утилиту vacuumdb добавлена опция "-j", позволяющая запускать VACUUM в несколько одновременно выполняемых потоков;
  • Сделаны улучшения масштабирования на системах с большим количеством процессорных ядер и оперативной памяти.

PostgreSQL поддерживает распараллеливание запросов

12 ноября 2015 года сообщество разработчиков сообщило о принятии в экспериментальной ветке, на базе которой будет формироваться релиз PostgreSQL 9.6 изменений, с реализацией распараллеливания операций последовательного сканирования записей (Sequential Scan), используемых для перебора значений в случае выборки по не индексированным полям или при манипуляциях с содержимым полей[5].

Перебор в несколько параллельных потоков позволит существенно увеличить скорость перебора данных на системах с большим числом процессорных ядер. Выигрыш особенно заметен для ресурсоёмких запросов, таких как сопоставление по регулярным выражениям.

Выполнение тестового запроса "select * from pgbench_accounts where filler like '%a%'" в обычных условиях занимает 743 мс, в то время как распараллеливание в четыре потока дает результат - 213 мс.

При распараллеливании операция сканирования разбивается на части и каждая часть разбирается отдельным обработчиком, после чего результаты работы каждого обработчика объединяются.

Сравнение производительности с лицензионными СУБД

18 мая 2015 года «Индиго ИТ» сообщила о результатах сравнительного тестирования производительности наиболее востребованных на рынке СУП СУБД - в отдельных тестовых наборах СУБД с открытыми кодами PostgreSQL была в три раза лучше MS SQL и Oracle DataBase.

Тестирование проводилось с целью мониторинга новых технологий и реализации плана технологического развития на 2015 год.

Андрей Черногоров, генеральный директор «Индиго ИТ», отметил: «Сегодня на рынке ИТ наиболее востребованными являются СУБД MS SQL и Oracle DataBase. Вместе с тем, по ряду ключевых возможностей им ни чем не уступает, а кое-где и превосходит, СУБД с открытыми кодами PostgreSQL, что открывает перед ней широкие перспективы для использования в рамках программы импортозамещения».

Для тестирования специалисты компании подготовили идентичные для всех СУБД тестовые наборы данных. Объектом испытаний стала база данных объемом 1 ТБ, состоящая из 1 млн. бизнес-объектов. Продолжительность тестирования для каждой СУБД - 10 часов.

В нем участвовали последние версии наиболее востребованных заказчиками «Индиго ИТ» СУБД:

Всего проведено 5 наборов тестов:

  • создание сложно структурированных документов,
  • обновление сложно структурированных документов,
  • поиск документов,
  • запись файла в базу данных,
  • получение файла из базы данных.


Результаты тестирования, 2015

Под временем, затраченным в каждом из наборов тестов указанных в таблице, имеется ввиду усредненное по всем наборам значение (мс). Тестирование проводилось на серверах с процессорами Intel Xeon Е5 v3 с 128 Гб ОЗУ.

В результате  нагрузочного тестирования на двух из пяти наборов тестов (создание сложно структурированных документов, обновление сложно структурированных документов) PostgreSQL 9.4 показала результаты почти в три раза лучше, чем у конкурентов. В остальных тестах (поиск документов, запись и получение файлов из БД) участники тестирования показали почти одинаковые результаты.

Андрей Черногоров заявил о намерении компании - рекомендовать заказчикам, для решений компании, PostgreSQL не только потому, что эта СУБД распространяется бесплатно, но потому, что демонстрирует более высокие показатели производительности на решениях Индиго ИТ. Он выразил уверенность, что это станет аргументом в пользу перехода на отечественные и открытые решения в рамках программы импортозамещения, объявленной президентом России.

2010

PostgreSQL 9.4

Поддержка данной версией СУБД с открытым кодом PostgreSQL широко распространенного формата обмена данными JSON нацелена на растущий рынок нереляционных хранилищ данных NoSQL и особенно на популярную СУБД MongoDB.

В первой бета-версии PostgreSQL 9.4 появился ряд новых функций, ориентированных на стремительно расширяющийся рынок веб-приложений, многим из которых требуются быстрые хранилища и выборка больших объемов пользовательских данных.

Версия PostgreSQL 9.4 поддерживает формат JSON (JavaScript Simple Object Notation), который быстро завоевал популярность при организации обмена данными между различными системами, в том числе и с применением протокола REST (Representational State Transfer). Успех документальной СУБД MongoDB во многом обусловлен как раз растущей популярностью JSON.

Структурированный формат PostgreSQL для сохранения данных в соответствии со спецификациями JSON (JSONB) исключает необходимость реструктуризации документа перед его занесением в базу данных. В результате PostgreSQL проглатывает документы так же быстро, как и MongoDB, продолжая при этом удовлетворять требованиям ACID (atomicity, consistency, isolation, durability — атомарность, согласованность, изолированность и надежность), которые предъявляются к хранению информации в базах данных. Кроме того, PostgreSQL поддерживает полный набор индексных сервисов, функций и операторов для эффективного манипулирования данными JSON.

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

PostgreSQL получила ряд новых функций:

  • Новый интерфейс API для декодирования данных из потока репликации открывает независимым разработчикам программного обеспечения путь к созданию более быстрых реплицирующих систем.
  • Новая функция Materialized Views, называемая «одновременным обновлением», позволяет на лету обновлять итоговые отчеты.
  • Функция Alter System Set поможет администраторам изменять файл конфигурации PostgreSQL непосредственно из командной строки SQL.

Добавлен ряд функций и возможностей, среди которых динамические фоновые исполнители (Dynamic Background Workers), манипуляции с массивами и табличные функции, увеличена общая производительность.

PostgreSQL 9.3

В PostgreSQL 9.3 реализован ряд механизмов, позволяющих обмениваться информацией с другими базами и хранилищами данных. Модули Foreign Data Wrapper, которые появились еще в версии 9.1 и раньше позволяли только считывать данные из других систем, теперь предоставляют и возможность записи. Поддерживается работа как с реляционными таблицами, так и с полуструктурированной информацией из систем NoSQL. Для СУБД также создан драйвер, который позволяет связать с друг другом две разных копии самой PostgreSQL и обеспечивает ускоренное выполнение транзакций между ними.

Среди других особенностей — расширенная поддержка JSON и возможность создания произвольных фоновых серверных модулей с неограниченным доступом к данным PostgreSQL. Пример — модуль Mongres, автоматически переводящий запросы MongoDB в формат PostgreSQL.

Реализовано автоматическое обновление представлений и добавлена утилита, позволяющая в параллельном режиме выполнять резервное копирование больших баз. Приняты меры по повышению надежности СУБД. Функция Fast Failover позволяет переключить работу с мастер-базы на копию меньше чем за секунду. Появилась возможность проверки контрольных сумм страниц, помогающая диагностировать сбои жестких дисков.

PostgreSQL 9.2

Разработчики СУБД с открытым кодом PostgreSQL продолжают оптимизировать ее для корпоративного применения: новая версия может исполняться на серверах, имеющих до 64 процессорных ядер, тогда как в предыдущей максимум был 16. PostgreSQL 9.2 также поддерживает запросы в формате JSON, благодаря чему разработчики веб-приложений могут обращаться к СУБД как к NoSQL-хранилищу «ключ-значение» с помощью привычных инструментов наподобие jQuery.

Что касается быстродействия, система в новой версии способна обрабатывать до 350 тыс. запросов на считывание в секунду, вчетверо больше, чем Postgres 9.1. А максимальная скорость записи выросла впятеро, достигнув 14 тыс. операций в секунду.

Среди других особенностей — механизм исключительного поиска по индексу, ускоряющий выполнение некоторых запросов в 20 раз, и возможность хранить и опрашивать диапазоны данных заданного типа; как объясняют разработчики, эта особенность дает большую гибкость, чем другие реляционные РСУБД, где подобные задачи решаются с использованием двух столбцов.

В Postgres улучшен механизм управления блокировками с расчетом на ускорение выполнения больших рабочих нагрузок. Сборка Postgres 9.2 выпущена в том числе для ОС HP-UX, работающей на серверах с процессорами Itanium.

PostgreSQL 9.1

PostgreSQL Global Development Group представила новую версию сервера баз данных PostgreSQL 9.1.0. Основные изменения в новой версии:

  • синхронная репликация в распределенной БД;
  • поддержка внешних таблиц, т. е. чтения файлов вне БД как таблиц (пока запись не поддерживается);
  • поддержка предложения COLLATE для выбора символьной сортировки (collation);
  • поддержка расширений для сервера;
  • полноценная изоляция последовательных (serializable) транзакций (в прежних версиях могли происходить некоторые аномалии, которые теперь устранены); алгоритм изоляции транзакций теперь соответствует уровню Repeatable read;
  • возможность создавать непротоколируемые таблицы с помощью опции UNLOGGED в команде CREATE TABLE;
  • возможность изменения данных (INSERT/UPDATE/DELETE) в предложении WITH;
  • индексы GiST теперь обеспечивают быстрый поиск ближайших соседей;
  • добавлена поддержка SELinux и команды SECURITY LABEL;
  • добавлен ряд новых возможностей программирования сервера с помощью PL/Python.

С момента выхода версии 9.0 прошел без малого год, с момента последнего обновления в ветке 9.* (9.0.4) — около 4 месяцев, а с момента выхода первого и последнего релиз-кандидата (9.1 RC1) — 20 дней. Сервер распространяется под собственной лицензией, похожей на лицензию BSD и одобренной Open Source Initiative.

PostgreSQL 9.0

Разработчики открытой системы управления базами данных PostgreSQL выпустили в сентябре 2010 года первый релиз-кандидат системы Postrgesql 9.0, в котором реализованы все функции, заготовленные к выходу в девятой версии этой популярной СУБД. В свободном доступе на данный момент доступна бинарная версия предварительной сборки Postgresql 9.0 и все желающие могут протестировать новые возможности этой разработки перед тем, как переводить на нее производственные серверы, работающие с реальной информацией.

Также в девятой версии появилась возможность репликации информации из бинарных логов, соответствующая механизму Hot Stanby Databases в Oracle Database. Не обошли вниманием разработчики и набирающие популярность облачные или SaaS-системы. Теперь СУБД оптимизирована для работы в среде виртуальных машин, поддерживает механизм быстрого клонирования данных, а также возможность репликации информации с единого мастер-сервера на большое количество (более сотни) подчиненных серверов. Также новый релиз полностью поддерживает возможности адресации памяти в 64-битных вариантах Windows.

Примечания



ПРОЕКТЫ (37) ПРОЕКТЫ НА БАЗЕ (3) ИНТЕГРАТОРЫ (28)
СТАТЬИ (53) РЕШЕНИЕ НА БАЗЕ (8) ОТРАСЛИ (11)
ГЕОГРАФИЯ

ЗаказчикИнтеграторГодПроект
- Министерство связи и массовых коммуникаций РФ (Минкомсвязи)
Почта России2020.06Описание проекта
- Министерство связи и массовых коммуникаций РФ (Минкомсвязи)
ЭЛАР (Электронный архив, НПО Опыт)2018.10Описание проекта
- Министерство финансов Красноярского края
Бюджетные и Финансовые Технологии (БФТ)2018.09Описание проекта
- Сбербанк РФ
Постгрес профессиональный (ППГ, Postgres Professional)2018.07Описание проекта
- Ростелеком
РТ Лабс2017.12Описание проекта
- Почта России
Luxoft (Люксофт Профешнл)2017.09Описание проекта
- ВТБ - Внешторгбанк
Luxoft (Люксофт Профешнл)2017.05Описание проекта
- Яндекс.Деньги
Без привлечения консультанта или нет данных2017.03Описание проекта
- Правительство Москвы
Департамент информационных технологий Москвы (ДИТ)2017.03Описание проекта
- Ведомственная охрана железнодорожного транспорта РФ
ИнтэлЛекс (Intellex)2017.02Описание проекта
- Банк Открытие
Без привлечения консультанта или нет данных2017.02Описание проекта
- Департамент информационных технологий Москвы (ДИТ)
Системы документооборота2016.12Описание проекта
- Министерство транспорта РФ
ЗащитаИнфоТранс2016.12Описание проекта
- Домашние деньги
Без привлечения консультанта или нет данных2016.12Описание проекта
- Министерство связи и массовых коммуникаций РФ (Минкомсвязи)
ФГБУ НИИ Восход2016.12Описание проекта
- РФЯЦ-ВНИИЭФ Всероссийский научно-исследовательский институт экспериментальной физики (федеральный ядерный центр)
Без привлечения консультанта или нет данных2016.11Описание проекта
- Правительство Московской области
Системы документооборота2016.09Описание проекта
- Ростелеком
Совзонд2016.09Описание проекта
- Яндекс (Yandex)
Постгрес профессиональный (ППГ, Postgres Professional)2016.09Описание проекта
- Министерство государственного управления, информационных технологий и связи Московской области
Без привлечения консультанта или нет данных2015.12Описание проекта
- РФЯЦ-ВНИИЭФ Всероссийский научно-исследовательский институт экспериментальной физики (федеральный ядерный центр)
Информконтакт консалтинг2015.12Описание проекта
- Информационный центр при Президенте Республики Саха (Якутия)
Неолант2015.12Описание проекта
- Медицинский информационно-аналитический центр Ямало-Ненецкого автономного округа (МИАЦ ЯНАО)
Комплексные медицинские информационные системы - К-МИС2015.12Описание проекта
- Министерство связи и массовых коммуникаций РФ (Минкомсвязи)
ГКС Группа компаний Систематика2015.12Описание проекта
- Россия сегодня
Без привлечения консультанта или нет данных2015.11Описание проекта
- Администрация Березовского района Ханты-Мансийского автономного округа - ЮГРА
Нэкст Техника Научно-техническая лаборатория2015.09Описание проекта
- Mango Office (ранее Манго Телеком)
Без привлечения консультанта или нет данных2015.09Описание проекта
- Российские сети (Россети, ранее Холдинг МРСК)
ТопС Бизнес Интегратор (TopS BI)2009.09Описание проекта
- Федеральная служба по аккредитации (Росаккредитация)
Без привлечения консультанта или нет данных---Описание проекта
- Информационный центр при Президенте Республики Саха (Якутия)
Никел геймс---Описание проекта

<< < 1 2 > >>


Подрядчики-лидеры по количеству проектов

За всю историю
2014 год
2015 год
2016 год
Текущий год

Распределение вендоров по количеству проектов внедрений (систем, проектов) с учётом партнёров

За всю историю
2014 год
2015 год
2016 год
Текущий год

  Oracle (80, 185)
  SAP SE (41, 106)
  Microsoft (44, 104)
  PostgreSQL Global Development Group (9, 37)
  IBM (17, 14)
  Другие (220, 85)

  Microsoft (7, 20)
  Oracle (5, 10)
  SAP SE (2, 8)
  Vertica (1, 2)
  Imperva (1, 2)
  Другие (7, 7)

  Oracle (12, 27)
  SAP SE (2, 14)
  Microsoft (3, 9)
  PostgreSQL Global Development Group (1, 8)
  HFLabs (HumanFactorLabs) ХФ Лабс (1, 2)
  Другие (1, 1)

  Oracle (7, 19)
  SAP SE (6, 16)
  PostgreSQL Global Development Group (1, 8)
  Microsoft (3, 7)
  Apache Software Foundation (3, 3)
  Другие (11, 12)

  Oracle (6, 31)
  Microsoft (3, 7)
  PostgreSQL Global Development Group (1, 7)
  Apache Software Foundation (1, 3)
  SAP SE (1, 2)
  Другие (3, 3)

Распределение базовых систем по количеству проектов, включая партнерские решения

За всю историю
2014 год
2015 год
2016 год
Текущий год

  Oracle database - 27 (26, 1)
  PostgreSQL СУБД - 7 (7, 0)
  Microsoft SQL Server - 6 (5, 1)
  Apache Hadoop - 3 (3, 0)
  SAP HANA (High Performance Analytic Appliance) - 2 (2, 0)
  Другие 6