Что такое PostgreSQL
В материале поговорим об одной из самых популярных СУБД — 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 регулярно бэкапируем экземпляры СУБД и обеспечиваем мониторинг системы. На вашей стороне только проектирование архитектуры базы данных и настройка доступов.