Разработчики: | PostgreSQL Global Development Group |
Дата последнего релиза: | 2024/09/30 |
Технологии: | СУБД |
Содержание |
Основная статья: Система управления базами данных (СУБД)
Свободная объектно-реляционная система управления базами данных (СУБД), является свободной альтернативой коммерческим СУБД (таким как 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)", предоставляющая услуги по поддержке, обучению, разработке, консалтингу.
Функции
Функции являются блоками кода, исполняемыми на сервере, а не на клиенте БД. Хотя они могут писаться на чистом 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 и функции обработки геоданных.
2024
Размещение в Linx Cloud
Провайдер Linx Cloud разместил в облаке объектно-реляционную систему управления базами данных PostgreSQL в формате DBaaS. Об этом провайдер сообщил 1 ноября 2024 года. Подробнее здесь.
PostgreSQL 17 с поддержкой стандарта SQL/JSON
PostgreSQL Global Development Group 30 сентября 2024 года сообщила о выходе мажорной версии PostgreSQL.
PostgreSQL 17 включила большое количество улучшений, повышающих производительность, отказоустойчивость и безопасность работы. Среди авторов более 30 россиян, разработчиков из команды Postgres Professional. Компания с 2015 года отправляет патчи в открытую PostgreSQL.
Среди ключевых обновлений 17 версии: обновленная система управления памятью для VACUUM; поддержка стандарта SQL/JSON; улучшения производительности запросов; поддержка инкрементального бэкапа pg_basebackup; улучшения в логической репликации.
Подробнее об изменениях в PostgreSQL 17:
- Возможность создавать инкрементальные копии, сохраняющие только изменения, сделанные относительно другой резервной копии.
- Обновление команды COPY… FROM. Команда научилась игнорировать ошибки, связанные с неправильным форматом значений отдельных столбцов.
- Структура памяти и интерфейс работы с идентификаторами строк на основе сжатого префиксного дерева (radix tree).
- Объединение WAL-записей об очистке и заморозке страницы.
- Для каждого кеша SLRU появился соответствующий параметр конфигурации (с суффиксом _buffers в названии), что позволяет тонко настраивать систему под специфическую нагрузку.
- Параметр sslnegotiation для клиентских приложений, работающих через libpq. Благодаря параметру клиент и сервер могут обойтись без предварительного согласования использования TLS.
- Поддержка стандарта SQL/JSON.
- Встроенный провайдер локалей для C.UTF8.
- Привилегия MAINTAIN и предопределенная роль pg_maintain.
- Параметры для команды EXPLAIN: SERIALIZE, MEMORY.
- Возможность создавать триггер события на подключение к базе данных.
- Представление сборщика статистики pg_stat_checkpointer.
Так же добавились возможности в команде MERGE:
- В качестве целевого отношения теперь можно использовать обновляемое представление.
- Условие WHEN NOT MATCHED BY SOURCE для обработки строк целевого отношения, которых нет в источнике.
- Поддержка предложения RETURNING. Функция merge_action поможет понять, какие строки были добавлены, изменены.
- Также внесены изменения в работу логической репликации:
- Синхронизация логических слотов репликации между мастером и репликой.
- Перенос слотов репликации при обновлении сервера публикации.
- Быстрое создание логической реплики из физической.
Обновленные версии Postgres Pro на базе 17 версии компания выпустит уже в 2024 году.
Мы постоянно работаем над тем, чтобы сокращать разрыв между выходами релизов PostgreSQL и Postgres Pro. Раньше мы проводили большое сравнение слияний изменений раз в год, когда выходила очередная версия Open Source. Это был довольно сложный процесс, поскольку изменений было много, а часть из них в некоторых случаях даже могла противоречить друг другу. Поэтому несколько лет назад команда перешла к практике непрерывного слияния изменений. Делаем это постоянно, практически ежедневно, как только изменения принимаются в открытой версии. Благодаря такому подходу мы свели техническое отставание к минимуму: выпускаем обновленную версию Postgres Pro Standard через считанные дни после выхода PostgreSQL, а Postgres Pro Enterprise — спустя несколько недель, — сказал сооснователь и заместитель генерального директора Postgres Professional Иван Панченко. |
Доступность в облаке Т1 Cloud
Клиентам T1 Cloud стали доступны сразу три облачных сервиса в формате Managed Services (управляемые сервисы) на основе актуальных версий систем управления базами данных PostgreSQL, MongoDB и Redis. Об этом T1 Cloud сообщил 19 марта 2024 года. Подробнее здесь.
ФСТЭК предупредила об опасной уязвимости в Java-коннекторе для PostgreSQL
ФСТЭК в конце февраля предупредила об обнаружении сведений об опасной уязвимости BDU:2024-01541[1], которая присутствует в JDBC-драйвере PostgreSQL и позволяет удаленно выполнить вредоносный код. Хотя по классификации CVSS она имеет индекс 10 из 10, однако далеко не каждая установка этой СУБД ей подвержена.
Для ошибки выпущены исправления[2] в версиях 42.7.2, 42.6.1, 42.5.5, 42.4.4, 42.3.9, 42.2.28 и 42.2.28.jre7, до которых и рекомендуется обновиться. Кроме того, в режиме работы JDBC-драйвера по умолчанию она не опасна.
Драйвер JDBC - это программный компонент, позволяющий приложению Java формировать запросы к СУБД с поддержкой стандарта SQL. Стандарт такого взаимодействия обеспечивает связь между сервером приложений и базой данных, которые являются частями современных систем управления веб-проектами (CMS). Хотя для пользователей такое взаимодействие скрыто кодом веб-сервера, тем не менее в некоторых вариантах веб-приложений, где у пользователя есть возможность указывать параметры запроса (например, поискового) есть возможность передачи соответствующих параметров через JDBC-драйвер и вызвать срабатывание уязвимости.
Впрочем, ошибка проявляется только в случае использования специального режима подготовки запроса, для включения которого требуется в конфигурации соединения Java-приложения с СУБД внести строку preferQueryMode=simple. В этом режиме для эксплуатации уязвимости также необходимо наличие двух параметров: целочисленного и строкового – без фильтрации их содержимого. При таком сочетании условий посимвольное составление JDBC-запроса приводит к образованию из двух минусов (знак «-») последовательности «--», с которой в SQL начинается комментарий. В результате у злоумышленника появляется возможность экранировать легальный запрос и исполнить свой, передаваемый во втором, текстовом параметре.
Фактически это новый тип SQL-инъекции, позволяющий исполнять в уязвимой СУБД свои запросы.
В небольших веб-проектах, построенных на серверах Java-приложений, скорее всего, эта ошибка не будет проявляться, поскольку в них используются настройки подключения по умолчанию. На наличие такой ошибки стоит обратить внимание сложным веб-проектам, где сейчас все чаще внедряются конвейеры DevSecOps. Если они основаны на PostgreSQL, то стоит обновить соответствующие зависимости и установить новую версию СУБД.
Рекомендованные ФСТЭК компенсирующие меры следующие: использование режима запроса по умолчанию; при настройке свойств соединения не использовать значение параметра preferQueryMode=simple; использование средств межсетевого экранирования для ограничения возможности удаленного доступа. Кроме того, перед веб-сервером стоит установить WAF, который может обнаруживать и фильтровать опасные команды, содержащиеся в запросах пользователей.
Обнаружена опасная уязвимость в PostgreSQL, позволяющая выполнять команды от имени разработчика
В БДУ ФСТЭК 12 февраля 2024 года были внесены сведения о критической уязвимости в базе данных PostgreSQL BDU:2024-01121[3], которая позволяет удалённому нарушителю выполнить произвольные команды от имени разработчика. По CVSS данная уязвимость имеет значение 8 из 10.
Для уязвимости опубликован эксплойт, который работает на версиях до 16, 15.6, 14.11, 13.14 и 12.18. В указанных версиях (кроме 16), которые были выпущены 8 февраля, уязвимость устранена, поэтому рекомендуется как можно скорее установить соответствующие исправления.
Уязвимость[4] была обнаружена в функции REFRESH MATERIALIZED VIEW CONCURRENTLY, обращение к которой со специальным запросом позволяет выполнить посторонний код от имени создателя соответствующего объекта. В частности, это можно сделать с помощью специально подготовленного запроса CREATE RULE, который и позволяет запустить уязвимую функцию с необходимыми злоумышленнику командами.
PostgreSQL — популярная СУБД на территории России. По данным сервиса Netlas.io, обнаружено около 17,6 тыс. инсталляций. Правда, Россия в этом списке находится на пятом месте после США (106 тысяч), Польши (37,6 тысяч), Германии (37,5 тысяч) и Нидерландов (19,1 тысяча). Всего же по миру установлено 367,4 тысячи различных версий PostgreSQL, значительная часть из которых может оказаться уязвимой. Это создаёт опасность массовой атаки с использованием уже опубликованного эксплойта.
Следует отметить, что не все указанные установки поставлены из основного дистрибутива СУБД. Есть несколько коммерческих версий базы, обновление в которых должны проверить их разработчики. Кроме того, сама PostgreSQL, как правило, входит в серверные дистрибутивы Linux, и ее обновления также должны выпустить разработчики соответствующих ОС.
Работа эта может быть сделана в максимально сжатые сроки, но если для вашей версии обновления все ещё не выпущены, то сотрудники ФСТЭК рекомендуют стандартные компенсирующие меры, которые минимизируют доступность базы извне и возможности эксплуатации уязвимости. Они, в частности, включают: минимизацию пользовательских привилегий; отключение или удаление неиспользуемых учётных записей пользователей; использование средств межсетевого экранирования уровня веб-приложений для ограничения возможности удалённого доступа; использование виртуальных частных сетей для организации удаленного доступа.
2023
PostgreSQL 16
15 сентября 2023 года стало известно о том, что после 11 месяцев разработки опубликована обновленная стабильная ветка СУБД PostgreSQL 16. Обновления для данной ветки будут выходить в течение пяти лет до ноября 2028 года. Поддержка PostgreSQL 11.x, самой старой из поддерживаемых веток, будет прекращена 9 ноября.
Как сообщалось, основные изменения коснулись следующего:
- Механизм логической репликации, позволяющий транслировать на другой сервер изменения, вносимые в БД в ходе добавления, удаления или обновления записей, расширен возможностью реплицирования изменений с резервного сервера (standby). Например, в случае высокой нагрузки на первичный сервер резервный сервер можно использовать для передачи изменений на остальные вторичные системы.
- Добавлена поддержка двунаправленной логической репликации таблиц, позволяющая синхронизировать изменения в двух таблицах на разных серверах. Добавленные в PostgreSQL 16 возможности репликации позволяют создавать конфигурации с несколькими активными серверами (режим "active-active"), на которых одновременно можно выполнять операции "INSERT", "UPDATE", "DELETE".
- Оптимизирована производительность логической репликации. Например, реализована возможность использования параллельно выполняемых обработчиков при применении подписчиками больших транзакций. Добавлена возможность использования на стороне подписчика индексов B-tree для таблиц без первичных ключей, что позволяет обойтись без последовательного сканирования при поиске записей. Оптимизировано выполнение операций начальной синхронизации некоторых таблиц в бинарном формате.
- Расширены средства управления доступом к логической репликации. Например, добавлена предопределённая роль "pg_create_subscription", позволяющая предоставить пользователям право на создание новых подписок.
- Добавлена поддержка балансировки нагрузки на стороне клиентов, использующих штатную библиотеку libpq. Балансировка позволяет клиенту подключаться к разным хостам, которые могут выбираться как в определённом, так и в случайном порядке. Если хост недоступен, то осуществляется попытка подключения к другому серверу. После установки соединения запросы в рамках сеанса отправляются на выбранный сервер.
- Внесены оптимизации работы планировщика запросов:
- Обеспечено распаралелливание операций соединения таблиц "FULL JOIN" и "RIGHT JOIN".
- Оптимизировано применение операций "RIGHT JOIN" и "OUTER JOIN" для поиска строк, отсутствующих в присоединяемой таблице ("anti-join").
- Оптимизирована эффективность плана оптимизации для запросов в которых агрегатные функции используются в сочетании с выражениями "DISTINCT" или "ORDER BY".
- Для оптимизации запросов "SELECT DISTINCT" задействована инкрементальная сортировка.
- Проведена оптимизация оконных функций.
- Повышена скорость загрузки данных в пакетном режиме при помощи операции "COPY", среди прочего оптимизация затронула и одновременное выполнение нескольких операций "COPY". В некоторых ситуациях ускорение может достигать 300%.
- Оптимизирована стратегия выполнения операции VACUUM, что позволило сократить число ситуаций, требующих блокировки всей таблицы.
- На системах с архитектурами x86 и ARM реализовано использование векторных процессорных инструкций (SIMD) для оптимизации обработки ASCII-строк, операций с данными в формате JSON и выполнения поиска в массивах и подтранзакциях.
- Реализована поддержка операции "IS JSON" для проверки типа выражения JSON, определённой в стандарте SQL:2023. Добавлены функции JSON_ARRAY() и JSON_ARRAYAGG() для создания массивов в формате JSON.
- Разрешено использование в числах символа подчёркивания для повышения наглядности цифровых литералов. Например "SELECT ... WHERE a > 1_000_000".
- Добавлена возможность указания шестнадцатеричных, двоичных и восьмеричных литералов. Например "SELECT 0x1538, 0o12450, 0b1010100111001".
- В утилиту psql добавлена команда "\bind", позволяющая формировать параметризованные запросы и использовать переменные в запросах. Например "SELECT $1::int + $2::int \bind 1 2 \g".
- Расширена поддержка свойств локали "Collation", позволяющих задавать правила сортировки и методы сопоставления с учётом смысла символов (например, при сортировке цифровых значений учитывается наличие минуса и точки перед числом и разные виды написания, а при сравнении не принимается во внимание регистр символов и наличие знака ударения). По умолчанию теперь выполняется сборка с ICU-локалями ("ICU Collation") вместо локали libc.
- Расширены возможности для мониторинга производительности СУБД. Добавлено служебное представление "pg_stat_io" со статистикой, отражающей нагрузку на систему ввода/вывода различными бэкендами (background worker, autovacuum и т.п.) и объектами.
- В служебное представление "pg_stat_all_tables" добавлено поле с данными о времени последнего сканирования таблицы или индекса.
- В модуле "auto_explain" появилась поддержка журналирования значений, передаваемых в параметризованные запросы. Оптимизирована точность алгоритма отслеживания запросов, используемого в представлениях pg_stat_statements и pg_stat_activity.
- В файлах pg_hba.conf и pg_ident.conf, содержащих настройки доступа и аутентификации, предоставлена возможность использования регулярных выражений для имён пользователей и БД, а также добавлены директивы "include", "include_if_exists" и "include_dir" для включения содержимого других файлов с настройками.
- Добавлены дополнительные параметры для управления защитой клиентского соединения: require_auth, для задания параметров аутентификации, допустимых при подключении к серверу; sslrootcert="system" для использования хранилища корневых сертификатов удостоверяющих центров, предоставляемого операционной системой клиента. Добавлена поддержка механизма делегированная учётных данных Kerberos, который может применяться для аутентифицированного подключения к внешним сервисам с использованием модулей postgres_fdw и dblink.[5]
Создание утилиты для легкой миграции с ПО Oracle на российскую СУБД
В середине июня 2023 года Postgres Professional представила утилиту для легкой миграции с ПО Oracle на российскую СУБД PostgreSQL. По словам разработчиков, программа позволяет увеличить процент корректной конвертации кода в автоматическом режиме, что поможет заказчикам сэкономить до 50% времени на перенос и снизить затраты на миграцию с Oracle. Подробнее здесь.
Совместимость с RooX UIDM
Компания RooX 24 апреля 2023 года объявила о совместимости системы управления аутентификацией и авторизацией RooX UIDM с открытой СУБД PostgreSQL и ее сборкой Postgres Pro от российской компании Postgres Professional. Подробнее здесь.
Поддержка системой «Сёрчинформ КИБ»
«Сёрчинформ» представила обновление DLP-системы – в решении реализована поддержка свободно распространяемого PostgreSQL и его отечественного аналога Postgres Pro. Об этом стало известно 17 января 2023 года. Подробнее здесь.
2022
В мировом рейтинге контрибьюторов в 15 версию PostgreSQL - три российские компании
Сразу три российские компании вошли в мировой рейтинг разработчиков СУБД с открытым кодом PostgreSQL, подготовленный и опубликованный в конце марта 2023 года компанией EDB. Об этом 27 апреля 2023 года TAdviser сообщили представители Postgres Professional.
Так, российской компании Postgres Professional удалось занять второе место в рейтинге. Другие два отечественных разработчика — компании «Контур» и Arenadata — расположились на 17 и 33 местах соответственно. Подробнее здесь.
Поддержка PostgreSQL в «СёрчИнформ FileAuditor»
«СёрчИнформ» 1 декабря 2022 года выпустила обновление DCAP-системы «СёрчИнформ FileAuditor», теперь вся информация о файловых операциях, правах доступа и результаты классификации документов записываются в базу данных PostgreSQL. Подробнее здесь.
Совместимость с Navicon MDM
Системный интегратор и разработчик Navicon сообщил 7 ноября 2022 года о доработке системы управления мастер-данными Navicon MDM. Теперь решение совместимо с открытой СУБД PostgreSQL и ее сборками от российских компаний, в частности, Postgres Pro и Arenadata Postgres. Клиенты Navicon смогут управлять мастер-данными без покупки лицензий от крупных вендоров.Подробнее здесь.
PostgreSQL 14.4 с исправлением повреждения индексов
Сформирован корректирующий выпуск СУБД PostgreSQL 14.4, в котором устранена серьёзная проблема, при определённых обстоятельствах приводящая к незаметному повреждению данных в индексах при выполнении команд "CREATE INDEX CONCURRENTLY" и "REINDEX CONCURRENTLY". Об этом стало известно 17 июня 2022 года. В созданных при помощи указанных команд индексах могут быть не учтены некоторые записи, что приведёт к пропуску отдельных строк при выполнении SELECT-запросов с привлечением проблемных индексов.
Для определения факта повреждения индексов B-tree можно использовать команду "pg_amcheck --heapallindexed имя_БД". В случае выявления ошибок или применения в прошлых выпусках команд "CREATE INDEX CONCURRENTLY" и "REINDEX CONCURRENTLY" с другими типами индексов (GiST, GIN и т.п.) после обновления до версии 14.4 рекомендуется выполнить переиндексацию утилитой "reindexdb --all" или командой "REINDEX CONCURRENTLY имя_индекса".
Проблеме подвержена только ветка 14.x, в которую были включены оптимизации, исключающие при выполнении операции VACUUM некоторые транзакции, связанные с выполнением "CREATE INDEX CONCURRENTLY" и "REINDEX CONCURRENTLY". В результате применения этих оптимизаций в созданные в режиме "CONCURRENTLY" индексы не попадали некоторые находящиеся в heap-памяти кортежи, которые были обновлены или урезаны во время создания индекса[6].
Устранение уязвимости. Выпуск pg_ivm 1.0
12 мая 2022 года стало известно, что сформированы корректирующие обновления для всех поддерживаемых веток PostgreSQL: 14.3, 13.7, 12.11, 11.16 и 10.22. Ветка 10.x приближается к окончанию срока поддержки (обновления будут формироваться до ноября 2022 года). Выпуск обновлений для ветки 11.x продлится до ноября 2023 года, 12.x - до ноября 2024 года, 13.x - до ноября 2025 года, 14.x - до ноября 2026 года.
В актуальных версиях предложено более 50 исправлений и устранена уязвимость CVE-2022-1552, связанная с возможностью обхода изоляции выполнения привилегированных операций Autovacuum, REINDEX, CREATE INDEX, REFRESH MATERIALIZED VIEW, CLUSTER и pg_amcheck. Атакующий, имеющий полномочия создания не временных объектов в любой схеме хранения, может добиться выполнения произвольных SQL-функций с правами суперпользователя во время выполнения привилегированным пользователем вышеотмеченных операций, затрагивающих объект атакующего. В том числе эксплуатация уязвимости может произойти при автоматической чистке базы при выполнении обработчика autovacuum.
При невозможности выполнить обновление в качестве обходного пути блокирования проблемы можно отключить autovacuum и не выполнять привилегированным пользователем операции REINDEX, CREATE INDEX, REFRESH MATERIALIZED VIEW и CLUSTER, а также не запускать утилиту pg_amcheck и не восстанавливать содержимое из резервной копии, созданной утилитой pg_dump. Выполнение VACUUM признано безопасным, как и применение любых операции команд, если обрабатываемые объекты принадлежат пользователям, заслуживающим доверия.
Из других изменений можно отметить обновление кода JIT для работы с LLVM 14, разрешение использования шаблонов database.schema.table в утилитах psql, pg_dump и pg_amcheck, исправление проблем, приводящих к повреждению индексов GiST над столбцами ltree, неверному округлению значений в формате epoch, извлечённых из данных с типом interval, неверной работы планировщика при использовании асинхронных удалённых запросов, неверной сортировке строк таблицы при использовании выражения CLUSTER над индексами с ключами на базе выражений, потере данных при аварийном завершении сразу после построения отсортированного индекса GiST, взаимной блокировке при удалении секционированного индекса, состоянию гонки между операцией DROP TABLESPACE и фиксацией состояния (checkpoint).
Дополнительно можно отметить выпуск расширения pg_ivm 1.0 с реализацией поддержки IVM (Incremental View Maintenance) для PostgreSQL 14. IVM предлагает альтернативный способ обновления материализованных представлений, более эффективный в случае, если изменения затрагивают небольшую часть представления. IVM позволяет мгновенно обновлять материализованные представления, применяя к ним только инкрементальные изменения, без повторного вычисления представления, производимого при использовании операции "REFRESH MATERIALIZED VIEW".[7]
2020
Доступность для Docsvision 5.5.2
30 октября 2020 года стало известно о том, что вышла обновленная версия платформы Docsvision, доработанная в области быстродействия, стабильной работы и масштабируемости и поддерживающая работу с СУБД PostgreSQL и Postgres Pro. Теперь поддержка отечественной СУБД включена в официальный релиз платформы 5.5.2. Подробнее здесь.
Опыт использования Open Source базы данных PostgreSQL в корпоративной среде
В сентябре 2020 года «Инфосистемы Джет» сообщили об опыте использования Open Source базы данных PostgreSQL в корпоративной среде. Подробнее здесь.
Решение Hybrid Transaction Acceleration Processing для ускорения PostgreSQL
11 февраля 2020 года стало известно, что компания Swarm64 представила в России свое решение Hybrid Transaction Acceleration Processing с поддержкой программируемого акселератора Intel Arria 10 FPGA для ускорения СУБД с открытым кодом PostgreSQL. Подробнее здесь.
2019
Включение в продукты DeviceLock
22 октября 2019 года стало известно, что DeviceLock включил в свои продукты поддержку Postgres Pro и PostgreSQL. Подробнее здесь.
Запуск программы сертификации специалистов по СУБД PostgreSQL
21 мая 2019 года Postgres Professional сообщил о запуске программы сертификации специалистов по СУБД PostgreSQL.
Программа сертификации предусматривает три уровня с возрастающей квалификацией:
- «Профессионал»
- «Эксперт»
- «Мастер»
Для получения сертификата необходимо пройти тестирование в офисе компании Postgres Professional и набрать проходной балл. Материалом для подготовки могут служить авторские курсы Postgres Professional, доступные на сайте, а также регулярно читаемые в сертифицированных учебных центрах. Ежегодно слушателями курсов становятся более 500 человек.
Тест для первого уровня - «Профессионал» - включает в себя 50 вопросов по основам администрирования PostgreSQL и длится 75 минут. Поскольку для каждого релиза PostgreSQL характерны свои особенности администрирования, сертификация соотносится с конкретной версией СУБД. Например, на май 2019 года доступен тест для 10-ой версии PostgreSQL DBA1-10. Для прошедших тестирование на знание PostgreSQL 10 и желающих в будущем подтвердить свои навыки для 11-ой версии достаточно будет пройти короткое дополнительное тестирование, сфокусированное на отличиях продуктов.
Для получения сертификата уровня «Эксперт» понадобится успешно пройти уже три теста:
- DBA2-10 (настройка и мониторинг PostgreSQL)
- DBA3-10 (резервное копирование и репликация PostgreSQL)
- QPT-10 (оптимизация запросов)
А переход на уровень «Мастер» предполагает выполнение практических заданий по работе с PostgreSQL. В дальнейших планах компании Postgres Professional – запуск программы сертификации для разработчиков приложений на PostgreSQL.
Иван Панченко прокомментировал запуск программы сертификации:
Специалисты по Postgres становятся все более востребованными на российском рынке, что подтверждают данные кадровых агентств. В такой ситуации необходимы единые стандарты и критерии для оценки уровня знаний. Во многом наша программа сертификации стала ответом на запросы заказчиков и партнеров, заинтересованных в независимом инструменте оценки и повышения квалификации своих сотрудников. Иван Панченко, заместитель генерального директора Postgres Professional
|
Совместимость с Live Universal Interface
15 апреля 2019 года компания ФОРС Телеком сообщила о появлении в экосистеме программно-инструментальных средств, совместимых с открытой платформой Postgres Pro/PostgreSQL конструктора пользовательских веб-интерфейсов к базам данных - Live Universal Interface (LUI). Подробнее здесь.
Совместимость с TerraLink xDE
12 марта 2019 года TerraLink сообщил, что TerraLink xDE поддерживает OC семейства Linux и СУБД PostgreSQL. Подробнее здесь.
2018
Включение в список коммитеров СУБД PostgreSQL сооснователя Postgres Professional Александра Короткова
В июне 2018 года список коммитеров (разработчиков, вносящих вклад в развитие кода) СУБД PostgreSQL пополнился третьим россиянином. В список основных коммитеров ядра PostgreSQL был включен Александр Коротков, сооснователь и руководитель разработки российской компании Postgres Professional.
2017
Документация версии 10 локализована для России
11 октября 2017 года компания Postgres Professional сообщила о переводе документации по PostgreSQL 10.0 на русский язык. Материалы доступны в форматах Html, epub и pdf. Общий объем текста составляет почти 2 600 страниц.
Помимо документации на русском языке, российским пользователям PostgreSQL также доступна техническая поддержка в режиме 24/7, помощь в миграции с других СУБД на PostgreSQL, обучающие курсы и технические конференции.
В ближайшее время Postgres Professional планирует выпуск обновленной версии российской СУБД Postgres Pro Standard на основе PostgreSQL 10.0.
PostgreSQL 10
5 октября 2017 года состоялся релиз PostgreSQL версии 10. В целом с каждой версией, выходящей раз в год, PostrgeSQL получает возможности, расширяющие область эффективного применения СУБД.
Основные нововведения:
- Логическая репликация: отдельные части этого механизма были добавлены в PostgreSQL уже довольно давно, а в этой версии логическая репликация стала полностью доступна для пользователей. С ее помощью можно выборочно реплицировать отдельные таблицы на другой сервер, который при этом может выполнять как читающие, так и пишущие запросы. Серверы, участвующие в репликации, могут работать под управлением разных версий PostgreSQL, что позволяет проводить обновление кластера с минимальным временем простоя.
- Декларативное секционирование избавляет администратора от необходимости вручную определять иерархию таблиц, создавать триггеры и ограничения целостности.
- Параллельное выполнение запросов стало возможным для сканирования битовых карт и индексов, для соединения слиянием и подзапросов в дополнение к тем возможностям, которые появились в предыдущей версии.
- Синхронная репликация с учетом кворума позволяет фиксировать изменения, если их подтвердило необходимое число произвольных реплик.
- SCRAM-аутентификация является более криптостойким вариантом используемой ранее MD5-аутентификации.
Всего, по словам разработчиков, в версию 10 вошло более 100 изменений и улучшений, часть из которых выполнена в компании Postgres Professional.
Интеграция с Ethereum
14 сентября 2017 года российская компания Postgres Professional объявила о создании прототипа расширения Posthereum для интеграции полнофункциональной СУБД PostgreSQL с блокчейн-платформой Ethereum, предназначенной для регистрации сделок с любыми видами активов на основе системы «умных контрактов». По замыслу компании, крупные российские банки, корпорации и госструктуры, работающие с СУБД PostgreSQL, с помощью данной разработки смогут объединить базы данных с блокчейн-приложениями на основе Ethereum. Подробнее здесь.
2016
PostgreSQL 9.6
29 сентября 2016 года сообщество разработчиков представило стабильную ветку СУБД PostgreSQL 9.6. Обновления для нее 9.6 будут выходить в течение пяти лет, до сентября 2021 года.
Основные дополнения
- поддержка распараллеливания операций последовательного сканирования записей (Sequential Scan), слияния запросов (join) и агрегирования данных. При распараллеливании операция разбивается на части и каждая часть разбирается отдельным обработчиком, после чего результаты работы каждого обработчика объединяются, что позволяет существенно увеличить скорость обработки запроса на системах с большим числом процессорных ядер. Выигрыш заметен для ресурсоёмких запросов, таких как сопоставление по регулярным выражениям. Например, в текстах при включении распараллеливания некоторые запросы выполняются до 32 раз быстрее[8].
- режим синхронной репликации "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 в одной БД[9].
Поддержка ветки 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 года[10].
Изменения
- Функциональность "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 с реализацией инфраструктуры для параллельных вычислений[11].
Она предоставляет:
- Удобные процедуры для координирования запуска и завершения работы параллельно выполняемых рабочих процессов;
- Синхронизация различных внутренних состояний (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), используемых для перебора значений в случае выборки по не индексированным полям или при манипуляциях с содержимым полей[12].
Перебор в несколько параллельных потоков позволит существенно увеличить скорость перебора данных на системах с большим числом процессорных ядер. Выигрыш особенно заметен для ресурсоёмких запросов, таких как сопоставление по регулярным выражениям.
Выполнение тестового запроса "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.
Примечания
- ↑ BDU:2024-01541
- ↑ SQL Injection via line comment generation
- ↑ BDU:2024-01121
- ↑ CVE-2024-0985
- ↑ Релиз СУБД PostgreSQL 16
- ↑ Обновление PostgreSQL 14.4 с исправлением повреждения индексов
- ↑ Обновление PostgreSQL с устранением уязвимости. Выпуск pg_ivm 1.0
- ↑ Релиз СУБД PostgreSQL 9.6
- ↑ Обновление PostgreSQL 9.5.1, 9.4.6, 9.3.11, 9.2.15 и 9.1.20
- ↑ Релиз СУБД PostgreSQL 9.5
- ↑ Представлена инфраструктура по организации параллельных вычислений в PostgreSQL
- ↑ В СУБД PostgreSQL добавлена поддержка распараллеливания запросов
Подрядчики-лидеры по количеству проектов
SAP CIS (САП СНГ) (38)
Softline (Софтлайн) (35)
РДТЕХ (33)
BeringPro (БерингПойнт) ранее BearingPoint Russia (28)
ФОРС - Центр разработки (25)
Другие (729)
Сапиенс солюшнс (Sapiens solutions) (7)
Navicon (Навикон) (3)
BeringPro (БерингПойнт) ранее BearingPoint Russia (3)
GlowByte, ГлоуБайт (ранее Glowbyte Consulting, ГлоуБайт Консалтинг) (2)
IFellow (АйФэлл) (2)
Другие (35)
РДТЕХ (1)
IBS (1)
Ред Софт (Red Soft) (1)
InnoSTage (Инностейдж) (1)
Сбербанк-Технологии (СберТех) (1)
Другие (20)
Распределение вендоров по количеству проектов внедрений (систем, проектов) с учётом партнёров
Oracle (44, 179)
SAP SE (6, 177)
Microsoft (23, 142)
PostgreSQL Global Development Group (14, 125)
Постгрес профессиональный (ППГ, Postgres Professional) (6, 40)
Другие (263, 242)
SAP SE (3, 11)
Microsoft (3, 11)
PostgreSQL Global Development Group (3, 10)
Oracle (2, 4)
Постгрес профессиональный (ППГ, Postgres Professional) (2, 3)
Другие (10, 13)
PostgreSQL Global Development Group (4, 9)
Постгрес профессиональный (ППГ, Postgres Professional) (2, 6)
VK Tech (ранее VK Цифровые технологии, ВК Цифровые технологии и Mail.ru Цифровые технологии) (2, 3)
Arenadata (Аренадата Софтвер) (3, 2)
Apache Software Foundation (ASF) (2, 2)
Другие (9, 9)
PostgreSQL Global Development Group (3, 13)
Постгрес профессиональный (ППГ, Postgres Professional) (1, 6)
Arenadata (Аренадата Софтвер) (3, 5)
Apache Software Foundation (ASF) (3, 4)
Тантор Лабс (Tantor Labs) (2, 3)
Другие (8, 10)
PostgreSQL Global Development Group (4, 10)
Arenadata (Аренадата Софтвер) (3, 6)
VMware (2, 6)
Постгрес профессиональный (ППГ, Postgres Professional) (2, 5)
Сбербанк-Технологии (СберТех) (2, 2)
Другие (4, 6)
Распределение систем по количеству проектов, не включая партнерские решения
Oracle Database - 106
Microsoft SQL Server - 104
SAP NetWeaver Business Warehouse (SAP BW/4HANA) - 102
PostgreSQL СУБД - 79
SAP HANA (High Performance Analytic Appliance) - 72
Другие 374
Microsoft SQL Server - 9
SAP NetWeaver Business Warehouse (SAP BW/4HANA) - 8
PostgreSQL СУБД - 7
Oracle Database - 3
SAP HANA (High Performance Analytic Appliance) - 3
Другие 21
Postgres Pro СУБД - 5
ADB - Arenadata DB - 2
PostgreSQL СУБД - 2
Oracle Database - 2
Tarantool Платформа in‑memory вычислений - 2
Другие 13
Postgres Pro СУБД - 6
PostgreSQL СУБД - 4
Tantor СУБД - 3
ADB - Arenadata DB - 3
Apache Kafka - 2
Другие 10
ADB - Arenadata DB - 5
PostgreSQL СУБД - 4
Postgres Pro СУБД - 3
ADH - Arenadata Hadoop - 2
Сбер Platform V Pangolin - 2
Другие 8