PostgreSQL («Постгрес») — объектно-реляционная система управления базами данных с открытым исходным кодом, разрабатываемая командой PostgreSQL Global Development Group с 1996 года (наследует проект POSTGRES из Беркли, 1986). Реализует большинство стандартов SQL:2016, поддерживает сложные запросы, внешние ключи, триггеры, представления, транзакции с MVCC. Полностью соответствует ACID-требованиям (Multi-Version Concurrency Control).
Ключевые возможности
- MVCC — читатели не блокируют писателей. Каждая транзакция видит согласованный снимок данных.
- JSONB — нативное хранение JSON с индексами GIN. Гибридный подход: реляционные данные + полуструктурированные.
- Расширения — PostGIS (геоданные), pg_trgm (нечёткий поиск), uuid-ossp, hstore, pgcrypto, TimescaleDB.
- Сложные типы данных — массивы, диапазоны, составные типы, перечисления (ENUM), сетевые адреса.
- Параллельные запросы — многопоточное выполнение SELECT с версии 9.6 (2016).
- Логическая репликация — публикации/подписки для репликации конкретных таблиц (с версии 10, 2017).
- Партиционирование таблиц — декларативное (с версии 10) для управления большими таблицами.
История
Проект POSTGRES начат Майклом Стоунбрейкером в Калифорнийском университете (Беркли) в 1986 году. Первый публичный релиз — 1989 год. В 1993 году добавлен SQL (до этого — собственный язык POSTQUEL). В 1996 году проект переименован в PostgreSQL и выпущен под лицензией PostgreSQL (схожа с BSD). PostgreSQL 14 (2021) — крупное улучшение производительности. Часто сравнивают с MySQL: PostgreSQL предпочтителен для сложных запросов и аналитики, MySQL — для простых операций на web-хостинге. PostgreSQL 16 (2023) — дальнейшее ускорение параллельных запросов, логическая репликация из резервных серверов.
PostgreSQL в хостинге
PostgreSQL доступен на большинстве VPS и выделенных серверов. Настройка репликации Master-Slave повышает отказоустойчивость. Managed PostgreSQL предлагают все крупные облака: AWS RDS, GCP Cloud SQL, Яндекс Managed PostgreSQL, Selectel. Размер базы на диске не ограничен по умолчанию — управляется политиками хостинга. Для резервного копирования: pg_dump (логический дамп) и pg_basebackup (физическая копия). Мониторинг через pgAdmin или Grafana + postgres_exporter.
PostgreSQL: продвинутые возможности
JSONB в PostgreSQL — нативное хранение JSON с индексами (GIN): SELECT data->>'name' FROM users WHERE data @> '{"active": true}'. Полностью заменяет MongoDB для многих use cases. Extensions: pg_stat_statements (анализ медленных запросов), PostGIS (геопространственные данные), pgcrypto (шифрование), uuid-ossp (UUID генерация).
Параллелизм запросов: max_parallel_workers_per_gather = 4 — распараллеливание SELECT на 4 воркера. Partition pruning: партиционирование таблиц по диапазону дат снижает размер сканируемых данных. pg_bouncer как connection pooler: при сотнях соединений PostgreSQL потребляет ~10 МБ на соединение — PgBouncer сжимает N клиентских соединений в M серверных (transaction pooling).
На что обращать внимание
PostgreSQL по умолчанию использует «всё возможное ОЗУ» — настройка shared_buffers (обычно 25% ОЗУ) и work_mem критична. Без VACUUM таблицы разбухают из-за мёртвых строк MVCC — убедитесь, что autovacuum включён и настроен. Индексы по умолчанию — B-tree; для full-text search — GIN, для геоданных — GiST/BRIN. Для кэширования запросов используют Redis в связке с PostgreSQL. При переходе от MySQL учитывайте отличия: PostgreSQL case-sensitive в именах без кавычек, иначе строчные.