Открыть сервис

PostgreSQL: свободная объектно-реляционная система управления базами данных

PostgreSQL (часто произносится как «Постгрес» или «ПостгресКью-Эль») — это свободная объектно-реляционная система управления базами данных (СУБД), основанная на языке SQL. Она относится к классу открытого программного обеспечения и распространяется под лицензией PostgreSQL License, которая разрешает свободное использование, модификацию и распространение как в некоммерческих, так и в коммерческих проектах. Система известна своей расширяемостью, строгим соблюдением стандартов SQL и поддержкой сложных типов данных, включая JSON и пространственные объекты.

История и происхождение

История PostgreSQL начинается в 1986 году в Калифорнийском университете в Беркли, где профессор Майкл Стоунбрейкер руководил проектом POSTGRES. Этот проект стал продолжением более ранней исследовательской СУБД Ingres. Основной целью было создание системы, поддерживающей сложные типы данных и объектно-ориентированные концепции, которые отсутствовали в коммерческих реляционных базах того времени.

В 1994 году Эндрю Ю и Джоли Чен добавили в POSTGRES поддержку языка SQL, после чего проект получил новое имя — PostgreSQL. Первая версия, которую можно было использовать в производственной среде, вышла в 1996 году. В 1997 году был основан PostgreSQL Global Development Group — международное сообщество разработчиков, которое координирует развитие системы и по сей день. Майкл Стоунбрейкер за свой вклад в развитие баз данных получил премию Тьюринга в 2014 году.

Архитектура и ключевые особенности

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

Объектно-реляционная модель

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

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

Одной из главных особенностей PostgreSQL является механизм расширений. Расширения позволяют добавлять в базу данных новые типы, функции, операторы и даже языки программирования для написания хранимых процедур. Наиболее известные расширения включают PostGIS (географические объекты), pg_trgm (нечёткий поиск) и hstore (ключ-значение).

Соответствие стандартам и ACID

PostgreSQL стремится к полному соответствию стандарту SQL. Система поддерживает транзакции с гарантиями ACID (атомарность, согласованность, изоляция, долговечность). Для управления конкурентным доступом используется многоверсионность (MVCC), которая позволяет читателям не блокировать писателей и наоборот, что повышает производительность при большом количестве одновременных операций.

Основные функциональные возможности

  • Поддержка сложных типов данных: помимо стандартных числовых и строковых типов, PostgreSQL поддерживает массивы, JSON и JSONB, XML, UUID, сетевые адреса и интервалы времени.
  • Полнотекстовый поиск: встроенный механизм индексации и поиска по текстовым документам с учётом морфологии русского и других языков.
  • Хранимые процедуры и триггеры: поддержка написания серверного кода на нескольких языках, включая PL/pgSQL, PL/Python, PL/Perl и PL/Tcl.
  • Наследование таблиц: возможность создавать иерархию таблиц, где дочерние таблицы наследуют структуру и данные родительских.
  • Внешние таблицы: механизм foreign data wrappers позволяет обращаться к данным, хранящимся в других СУБД или файловых системах, как к обычным таблицам.

Версии и лицензирование

PostgreSQL развивается по модели регулярных мажорных релизов, которые выходят примерно раз в год. Каждая мажорная версия добавляет новые возможности и улучшения производительности. Например, версия 9.4 представила поддержку JSONB, версия 10 ввела логическую репликацию, а версия 14 значительно улучшила производительность при работе с большими объёмами данных. Система распространяется под лицензией PostgreSQL License, которая является одной из самых разрешительных среди open-source лицензий и позволяет использовать продукт без ограничений.

Применение

PostgreSQL широко используется в веб-разработке, науке, финансах и государственных информационных системах. Она является основной базой данных для многих фреймворков, включая Django и Ruby on Rails. Система используется такими крупными компаниями, как Apple, Red Hat и Instagram (продукт Meta, признанной экстремистской и запрещённой в РФ). В России PostgreSQL также популярна и часто применяется для создания государственных информационных систем благодаря свободной лицензии и отсутствию импортозависимости. Например, она используется в Едином портале государственных услуг и ряде систем Ростелекома.

Сравнение с другими СУБД

PostgreSQL часто сравнивают с коммерческими СУБД, такими как Oracle Database и Microsoft SQL Server, а также с открытой MySQL. По сравнению с MySQL, PostgreSQL предлагает более богатый набор типов данных и более строгое соблюдение стандартов, но может требовать больше ресурсов для настройки. По сравнению с Oracle, PostgreSQL уступает в некоторых корпоративных функциях, таких как расширенные средства шифрования и кластеризации, однако превосходит по стоимости владения.

Управление и администрирование

Для управления сервером PostgreSQL используется командная утилита psql, которая позволяет выполнять SQL-запросы и административные команды. Также существуют графические инструменты, такие как pgAdmin и DBeaver. Администратор базы данных может управлять пользователями, правами доступа, резервным копированием и настройками производительности через конфигурационные файлы, основной из которых называется postgresql.conf.

Критика и ограничения

Несмотря на многочисленные достоинства, PostgreSQL имеет и определённые недостатки. Некоторые пользователи отмечают, что по умолчанию система настроена недостаточно оптимально для высоких нагрузок и требует ручной тюнинга. Репликация в PostgreSQL исторически была менее гибкой, чем в коммерческих системах, хотя современные версии значительно улучшили эту область. Также критике подвергается сложность обновления между мажорными версиями, которая требует остановки сервера.

Интересные факты

  • Название «PostgreSQL» часто сокращают до «Postgres», и оба варианта являются официально допустимыми.
  • Маскотом проекта является слон по имени Слони (Slon), символизирующий надёжность и память.
  • PostgreSQL поддерживает процедурный язык PL/pgSQL, который по синтаксису близок к языку программирования PL/SQL из Oracle.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →