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 →
