Что такое PostgreSQL - Академия Selectel
В панель

Что такое PostgreSQL

Илья Шеметов Илья Шеметов Инженер данных 23 мая 2024

В материале поговорим об одной из самых популярных СУБД — PostgreSQL: рассмотрим области применения, основные преимущества и недостатки. Текст будет полезен бизнесу, инженерам и разработчикам, которые находятся на этапе проектирования информационных систем.

Изображение записи

Информация — один из самых ценных активов, при помощи которого решаются повседневные задачи. Изначально люди ведали делами на бумаге, а с появлением компьютеров стали фиксировать информацию в электронном виде. Наиболее понятный человеку формат хранения данных — таблица. Так на помощь пришел всеми любимый Excel. Но с ростом объемов данных его становилось недостаточно — и тогда в игру вступили базы данных.

Базы данных (БД), как правило, лежат в основе любого информационного ресурса, будь то сайт, корпоративный портал, система бухгалтерского учета, CRM и прочее. Они делятся на несколько типов: реляционные, колоночные, документо-ориентированные, объектно-ориентированные, основанные на парах ключ-значение, временных рядах и т. д.

Для внутреннего управления БД и обеспечения их целостности используют системы управления базами данных (СУБД). PostgreSQL относится к объектно-реляционным СУБД, которые позволяют одновременно хорошо «ладить» со структурами хранения данных как в виде объектов, так и совокупности таблиц.

Общая информация о PostgreSQL

Истоки создания PostgreSQL ведут нас в 1986, к университету в Беркли. Профессор Майкл Стоунбрейкер вместе со своими студентами собрал команду для создания новой СУБД, к разработке которой привлекли сотрудников другого проекта этого же учреждения — Ingres. Наработки СУБД претерпели ряд усовершенствований и дополнений, язык POSTQUEL был заменен на SQL. Кстати, этот проект сопровождается и совершенствуется по сей день.

В обиходе можно встретить много просторечных обозначений PostgreSQL: psql, pgsql, postres, postgre и т. д. В сообществе даже разгораются дискуссии на тему правильного произношения: [postgre] или [postgres]. Но сами создатели настаивают на варианте с postgres, т. к. он отсылает к первоначальному названию.

PostgreSQL является полностью некоммерческой СУБД, которую поддерживает сообщество — в его ряды может вступить любой желающий. Управление лежит на плечах команды PostgreSQL Core Team. В ее состав входит до 10 разработчиков, которые внесли наиболее существенный вклад в развитие проекта. Список основных членов команды можно посмотреть на сайте сообщества. Чтобы принять участие в развитии продукта, достаточно подписаться на рассылку, вступать в дискуссии и предлагать свои доработки.

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

Работать с СУБД в пользовательском режиме можно через консоль, pgadmin, DBeaver, DataGrip и ряд других оболочек, доступных в интернете.

Область применения PostgreSQL

PostgreSQL — СУБД с широким спектром использования. В первую очередь, с помощью нее можно создавать устойчивые транзакционные базы данных (OLTP). БД этого класса используют в финансах, веб-разработке и проектировании мобильных приложений, создании каталогов, научных библиотек или телефонных справочников, корпоративных информационных системах типа CRM или ERP и т. д.

Российский бизнес тесно связан с использованием приложений 1С в области бухгалтерии, учета деятельности предприятия и не только. При использовании 1С в клиент-серверном варианте работы в качестве СУБД можно выбрать PostgreSQL.

PostgreSQL применима и в области геоинформационных систем. В СУБД есть исчерпывающий набор типов данных для работы с географическими объектами, а также несколько индексов для ускорения работы с пространственными и геометрическими данными: GiST, SP-GiST и BRIN. К геоинформационным системам можно отнести различные решения в области логистики, навигации и конструирования.

Благодаря реализации в PostgreSQL векторных типов данных и GIN-индекса СУБД можно использовать в качестве самодостаточной системы полнотекстового поиска. Например, такую функцию можно внедрить в поисковую строку веб-сайта для навигации по нему, вывода каталога услуг или продукции.

В случае, когда компании нужно аналитическое решение, PostgreSQL можно использовать в качестве СУБД для корпоративного хранилища небольшого объема. Если же данных так много, что СУБД с ними не справляется, можно рассмотреть переход на более сложные системы типа MPP. Одной из таких систем может быть GreenPlum — ее использование будет кстати, поскольку она построена на PostgreSQL.

Преимущества PostgreSQL

Свободное распространение и открытый исходный код

PostgreSQL — бесплатный продукт с лицензией свободного распространения. Вне зависимости от того, используете вы ее в коммерческих целях или нет, СУБД не потребует денег. Есть различные платные редакции от сторонних производителей, которые вносят дополнительные изменения в исходный код, но они опциональны.

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

Доверие к продукту

У тех, кто еще не работал с PostgreSQL, наверняка возникают вопросы: можно ли доверять данному продукту? Надежен ли он? Будет ли он сопровождаться в дальнейшем? Ответ на все вопросы — да.

В основе политики создателей СУБД лежит принцип выкатки стабильного, качественно отлаженного продукта. Каждый релиз новой версии предварительно проходит этап бета-тестирования. История СУБД насчитывает уже второй десяток (на момент написания статьи) надежных production-ready версий. Новые версии выходят практически каждый год, при этом старые какое-то время продолжают сопровождаться и дорабатываться.

Кроссплатформенность

PostgreSQL — кросс-платформенная СУБД, поэтому она поддерживается различными операционными системами, среди которых привычные дистрибутивы Linux, Windows, macOS. Перед установкой рекомендуется ознакомиться с тем, какие версии совместимы с выбранной редакцией операционной системы.

Принципы ACID и многопользовательский режим БД

ACID — набор требований, который обеспечивает сохранность данных. Аббревиатура расшифровывается как atomicity, consistency, isolation, durability, то есть атомарность, согласованность, изолированность, устойчивость.

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

Безопасность

PostgreSQL предоставляет большой набор защищенных протоколов аутентификации, таких как GSSAPI, SSPI, LDAP, SCRAM-SHA-256 и т. д. В ней реализована ролевая модель, которая позволяет разграничивать права на уровне всех сущностей, к которым относятся базы данных, схемы, таблицы и т. д. вплоть до столбца или строки.

Богатый набор типов данных SQL

У PostgreSQL богатый портфель типов данных. Среди них есть примитивные, которые встречаются в большинстве СУБД и языков программирования (int, numeric, text, bool, timestamp). А есть и более специфичные, такие как списки, uuid, json/jsonb, геометрические (point, line, polygon и т.д.) и многие другие. И да, каждый пользователь может создать собственные типы данных.

Расширяемость

В PostgreSQL можно писать пользовательские функций и хранимые процедуры. Доступно использование собственного языка PL/pgSQL, есть поддержка Python и Perl. Посредством расширений можно подключить некоторые другие, например Java, JavaScript или R. Есть механизм Foreign data wrapper, который позволяет писать SQL-запросы в рамках используемой базы данных к сторонним базам различных СУБД.

Надежность

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

Здесь нужно понимать, что при выборе реализации стоит отталкиваться от задачи. Это связано с тем, что некоторые варианты репликации позволяют выполнять операции чтения/записи только одному серверу. Другие варианты позволяют использовать сразу несколько серверов. С одной стороны, это увеличивает общую производительность системы. С другой — допускает необходимость разрешения конфликтов изменения одного и того же набора данных.

«Синтаксический сахар»

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

В PostgreSQL есть широкий спектр удобных расширений над стандартным языком SQL. Они не всегда встречаются в других СУБД. Вот некоторые из них:

  • Конструкция distinct on. Она выдает уникальный набор строк в разрезе полей, перечисленных в части on, выбирая первую строку из отсортированных в части order by.
  • Возможность использования цифр в части group by для указания полей группировки, как и в конструкции order by (в других популярных СУБД такое возможно только для order by).
  • Функция агрегации строк через разделитель string_agg.
  • Функция получения первого отличного от null значения (coalesce) и многое другое.

Недостатки PostgreSQL

Сложность развертывания

Для увеличения производительности СУБД необходимо тонко настроить ее в соответствии со спецификой дальнейшего использования. Тут понадобятся толковые специалисты, которые смогут сделать это эффективно.

Нельзя делать запросы между объектами разных БД

Отсутствует возможность выполнения межбазовых запросов в рамках одного экземпляра СУБД. Нельзя сказать, что это ограничение критичное, но его обязательно стоит учитывать при проектировании будущего решения.

Нельзя прямо в запросе использовать переменные

Такая возможность есть в расширении PL/pgSQL для создания различных скриптов, будь то функции или процедуры, но отсутствует при написании обычных обращений к БД для получения выборки данных. Данный момент может быть неудобен при создании пользовательских ad-hoc запросов разной сложности, но не должен стать проблемой при использовании СУБД на стороне бэкенда.

Отсутствие columnstore индексов

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

Как начать работу с PostgreSQL

PostgreSQL — отличный вариант, который покрывает очень широкий спектр задач хранения данных. К тому же он бесплатен и пользуется доверием. Основные сложности связаны с развертыванием, настройкой конфигурации и дальнейшим сопровождением. Если вы определились с выбором, но данный аспект вас останавливает, посмотрите в сторону облачных баз данных Selectel.

В рамках сервиса мы предоставляем настроенную базу данных — например, на базе PostgreSQL. Наши инженеры возьмут на себя административную работу по конфигурированию СУБД и подберут оптимальное железо. Для аренды перейдите в панель управленияОблачная платформаБазы данных и нажмите Создать кластер. Подробная инструкция есть в Академии.

Создание кластера базы данных в панели управления.
Создание кластера базы данных в панели управления.

Кроме того, мы в Selectel регулярно бэкапируем экземпляры СУБД и обеспечиваем мониторинг системы. На вашей стороне только проектирование архитектуры базы данных и настройка доступов.

Читайте также: