Что такое PostgreSQL: история, философия, где применяется

Рейтинг: 40.9% · 8 голосов
Подробный курс по PostgreSQL: SQL по демобазе, типы данных и JSONB, индексы, транзакции и MVCC, VACUUM, EXPLAIN и планировщик, роли и привилегии, репликация, бэкап, настройка под нагрузку и под 1С. Актуально на 2026.
Ответить
Аватара пользователя
Egor_DBA
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Что такое PostgreSQL: история, философия, где применяется

Сообщение Egor_DBA »

Оглавление курса (47)
  1. Что такое PostgreSQL: история, философия, где применяется (вы здесь)
  2. Урок 1. Что нового в PostgreSQL 15 и далее (15 -> 16 -> 17)
  3. Установка и первый запуск: Linux, Windows, Docker
  4. psql детально: метакоманды и работа в консоли
  5. Демобаза Авиаперевозки Postgres Pro: структура и развёртывание
  6. SELECT: проекция, фильтрация, сортировка
  7. Транзакции и ACID
  8. Уровни изоляции транзакций: Read Committed, Repeatable Read, Serializable
  9. Соединения таблиц (JOIN)
  10. Агрегация: GROUP BY, HAVING, GROUPING SETS
  11. Подзапросы и CTE (WITH), рекурсия
  12. Оконные функции
  13. Изменение данных: INSERT/UPDATE/DELETE, UPSERT, MERGE
  14. Числовые и булевы типы, NULL и трёхзначная логика
  15. Строки, текст, дата и время, таймзоны
  16. Массивы, диапазоны, enum, составные типы
  17. JSON и JSONB: операторы и индексация
  18. DDL: CREATE TABLE, схемы, ALTER
  19. Ограничения целостности
  20. Представления и материализованные представления
  21. Последовательности, IDENTITY, генерируемые столбцы
  22. Индексы: B-tree и когда индекс не используется
  23. Типы индексов: Hash, GiST, SP-GiST, GIN, BRIN
  24. Продвинутые индексы: частичные, по выражению, покрывающие
  25. Обслуживание индексов и таблиц: bloat, REINDEX, CONCURRENTLY
  26. Полнотекстовый поиск
  27. Роли и пользователи
  28. Привилегии: GRANT/REVOKE
  29. Row-Level Security и безопасность данных
  30. Подключение приложения: pg_hba.conf, SSL, пулы соединений
  31. Серверное программирование: функции и процедуры
  32. Триггеры и события
  33. Архитектура PostgreSQL: процессы и память
  34. MVCC: версии строк и видимость
  35. VACUUM, autovacuum, freeze и wraparound
  36. WAL, контрольные точки и долговечность
  37. Блокировки и взаимоблокировки
  38. Планировщик запросов
  39. EXPLAIN и EXPLAIN ANALYZE: чтение планов
  40. Конфигурация сервера: ключевые параметры
  41. Настройка под нагрузку и под 1С
  42. Параллельные запросы и партиционирование
  43. Резервное копирование и восстановление
  44. Репликация: потоковая и hot standby
  45. Логическая репликация и кластерные решения
  46. Внешние данные, расширения и сертификация
  47. Разбор планов запросов на explain.tensor.ru: глубокое чтение EXPLAIN ANALYZE
Урок 0. Что такое PostgreSQL: история, философия, где применяется

Прежде чем писать первый запрос, стоит понять, с чем вообще имеешь дело. PostgreSQL это не просто очередная база данных, а проект с сорокалетней историей и очень упрямой инженерной философией. В этом уроке разберём, откуда вырос postgresql, чем объектно-реляционная модель отличается от просто реляционной, кто и зачем его развивает, и почему в 2026 году его выбирают под критичные системы под нагрузкой. Технической практики тут немного, но без этого фундамента дальше будет непонятно, почему многие вещи в PG устроены именно так.

Изображение

Как это работает

История начинается не с PostgreSQL, а с проекта POSTGRES в Калифорнийском университете Беркли. В середине 1980-х команда под руководством Майкла Стоунбрейкера строила преемника более ранней системы Ingres. Само имя читается как post-Ingres, то есть то, что идёт после Ingres. Идея была амбициозной: реляционная модель хороша для чисел и строк, но реальные данные сложнее, и СУБД должна уметь хранить и обрабатывать пользовательские типы, наследование таблиц, правила и сложные объекты, а не только то, что заложили авторы.

Дальше произошёл важный поворот. В 1994-1995 годах поверх POSTGRES прикрутили интерпретатор языка SQL вместо старого экспериментального QUEL, и проект переименовали в Postgres95, а вскоре в PostgreSQL. С этого момента он стал развиваться как открытый проект силами сообщества, и так живёт до сих пор. Поэтому название иногда сбивает с толку: SQL в нём появился позже самого ядра, отсюда и устоявшееся произношение пост-грес-кью-эль.

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

Философия проекта держится на нескольких принципах: строгое соответствие стандарту SQL, надёжность данных любой ценой и расширяемость вместо хардкода. PostgreSQL соблюдает ACID, то есть гарантирует атомарность, согласованность, изоляцию и долговечность транзакций. За изоляцию отвечает MVCC, многоверсионное управление конкурентным доступом: читатели не блокируют писателей, а писатели не блокируют читателей, потому что система хранит несколько версий строки одновременно. Из этого, кстати, растут и vacuum, и многое другое, что разберём в следующих уроках.

Важный момент это лицензия. PostgreSQL распространяется под либеральной лицензией PostgreSQL License в духе BSD/MIT. Её можно использовать в коммерческих продуктах без отчислений и без обязанности открывать свой код. Именно это сделало PG основой для десятков продуктов и форков. Развивает проект не одна компания, а распределённая структура: ядро ведёт Core Team и широкий круг мейнтейнеров, релизы выходят примерно раз в год. Большой вклад исторически вносят и компании вокруг, в том числе российская Postgres Professional, которая участвует в разработке ядра и развивает свою сборку.

SQL и примеры

Хотя урок обзорный, полезно сразу увидеть, что PostgreSQL знает о самом себе. Подключаемся клиентом psql и спрашиваем версию.

Код: Выделить всё

SELECT version();
-- покажет строку вида PostgreSQL 15.x ... вместе с платформой и компилятором
Тот же ответ, но в удобной разобранной форме, через системную переменную.

Код: Выделить всё

SHOW server_version;
SHOW server_version_num;
-- первая даёт 15.5, вторая целое число 150005, удобно сравнивать в скриптах
Чтобы прочувствовать объектно-реляционную природу, заглянем в системный каталог. Все типы данных, включая встроенные, лежат в обычной таблице pg_type, к которой можно сделать запрос.

Код: Выделить всё

SELECT typname
FROM pg_type
WHERE typname IN ('int4', 'jsonb', 'timestamptz', 'uuid')
ORDER BY typname;
-- типы это строки в каталоге, а не зашитый внутрь список
А теперь маленький намёк на то, ради чего всё затевалось. Дальше в курсе мы работаем с демобазой Авиаперевозки от Postgres Professional, схема bookings. Вот безобидный запрос, который считает количество аэропортов, чтобы убедиться, что база подключена.

Код: Выделить всё

SELECT count(*) AS airports_total
FROM bookings.airports;
-- ожидаем около сотни аэропортов в демобазе
Заодно проверим расширения, которые установлены в текущей базе, ведь расширяемость это её визитная карточка.

Код: Выделить всё

SELECT extname, extversion
FROM pg_extension
ORDER BY extname;
-- как минимум увидим plpgsql, на нём пишут триггеры и функции
Частые грабли
  • Путают PostgreSQL и устаревший Postgres из 80-х. Современный PG это проект сообщества с SQL, а не университетский прототип с языком QUEL.
  • Считают, что раз лицензия свободная, то проект ничей и без поддержки. На деле есть Core Team, регулярные релизы и коммерческие вендоры, включая Postgres Professional, с поддержкой корпоративного уровня.
  • Сравнивают MVCC с блокировками наугад и ждут, что версии строк исчезают сами. Старые версии накапливаются и убираются процессом vacuum, об этом отдельный урок.
  • Думают, что объектно-реляционная значит то же, что NoSQL. Нет, это всё та же реляционная база с ACID, просто сильно расширяемая, в том числе типом jsonb для гибких документов.
  • Тащат привычки из MySQL без проверки. В PostgreSQL другое поведение по умолчанию, своя реализация стандарта SQL и иные нюансы, например чувствительность к регистру имён в кавычках.
  • Для интеграции с 1С берут случайную сборку. Связка postgresql для 1с требует совместимой сборки и правильных настроек локали, иначе всплывают проблемы с сортировкой и производительностью.
Мини-лаба
  • Установи PostgreSQL 15 любым удобным способом или запусти в Docker, точную установку разберём в отдельном уроке, пока достаточно рабочего сервера.
  • Подключись клиентом psql к серверу под своим пользователем и выполни команду SELECT version(), запиши major-версию.
  • Выполни SHOW server_version_num и убедись, что число соответствует твоей версии, например 150005 для 15.5.
  • Запроси из pg_extension список установленных расширений и найди в нём plpgsql.
  • Сделай запрос к pg_type и найди там типы jsonb и timestamptz, чтобы убедиться, что типы лежат в каталоге как данные.
  • Если уже подключена демобаза bookings, посчитай число аэропортов и число самолётов в bookings.aircrafts.
  • Запиши вывод команды psql со флагом -V в блокнот, он пригодится при сравнении окружений.
Контрольные вопросы
  • Откуда пошло название POSTGRES и почему в PostgreSQL приставка SQL появилась позже самого ядра?
  • Что означает термин объектно-реляционная СУБД и чем расширяемость PostgreSQL отличается от подхода, где всё зашито в ядро?
  • Какие четыре свойства транзакций описывает аббревиатура ACID и какую роль в их обеспечении играет MVCC?
  • Почему свободная лицензия PostgreSQL важна для бизнеса и как при этом устроена разработка проекта?
  • Какие сильные стороны делают PostgreSQL подходящим для критичных систем под нагрузкой в 2026 году?
  • Где в системе можно увидеть, что типы данных и расширения это обычные строки в каталоге, а не скрытые сущности?
👍3 ❤️1 🔥 😄 🤔1
Аватара пользователя
kernel_wizard
Сообщения: 1
Зарегистрирован: 11 май 2026, 01:38

Re: Что такое PostgreSQL: история, философия, где применяется

Сообщение kernel_wizard »

Всю жизнь думал что Postgres это просто SQL-база, а оказывается SQL туда вообще позже завезли, забавно
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
uglyn
Сообщения: 1
Зарегистрирован: 16 май 2026, 23:34

Re: Что такое PostgreSQL: история, философия, где применяется

Сообщение uglyn »

А подскажите, для 1С реально брать обычный ванильный PostgreSQL 15 или нужна именно сборка от вендора? а то у нас на проде сортировка как-то странно работает
👍2 ❤️ 🔥 😄 🤔1
Ответить
Следующая глава →
Урок 1. Что нового в PostgreSQL 15 и далее (15 -> 16 -> 17)

Все главы курса «PostgreSQL: от первого запроса до продакшена»

Поделиться темой: ✈ Telegram VK
Похожие запросы: autovacuum не успевает как настроить postgresqlкак читать план запроса explain analyze в postgresqlpostgresql не использует индекс делает seq scanтриггеры и хранимые процедуры pl/pgsql в postgresqlбэкап и восстановление postgresql через pg_dumpclickhouse vs postgresql для аналитики что выбрать

Вернуться в «PostgreSQL: от первого запроса до продакшена»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость