# PostgreSQL

> Свободная объектно-реляционная СУБД с развитой поддержкой стандарта SQL, транзакций, расширений и типов данных — от JSON до векторов.

Источник: https://llmdocs.ru/wiki/postgresql/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: объектно-реляционная СУБД
- **Разработчик**: PostgreSQL Global Development Group
- **Первый выпуск**: 1996 (как PostgreSQL; проект POSTGRES — с 1986)
- **Язык реализации**: C
- **Лицензия**: PostgreSQL License (разрешительная, в духе BSD/MIT)
- **Порт по умолчанию**: 5432
- **Цикл выпусков**: мажорная версия ежегодно, поддержка 5 лет
- **Сайт**: postgresql.org
**PostgreSQL** (произносится «пост-грес-кью-эль», в обиходе — **Postgres**) — свободная объектно-реляционная система управления базами данных. Она известна строгим следованием стандарту [SQL](https://llmdocs.ru/wiki/sql.md), надёжными [транзакциями](https://llmdocs.ru/wiki/transaction-acid.md), богатым набором типов данных и механизмом расширений, который позволяет добавлять новые типы, функции, индексы и даже языки программирования. По опросам разработчиков Stack Overflow PostgreSQL с 2023 года — самая используемая база данных.[8]

## История

Проект начался в 1986 году в Калифорнийском университете в Беркли под руководством Майкла Стоунбрейкера как преемник СУБД Ingres — отсюда название POSTGRES («после Ingres»). В нём впервые появились пользовательские типы данных и правила. В 1994 году Эндрю Ю и Джолли Чен заменили собственный язык запросов PostQUEL на SQL и выпустили Postgres95; в 1996 году проект переименовали в PostgreSQL и передали сообществу.[1]

Сегодня PostgreSQL развивает глобальная группа разработчиков, не принадлежащая какой-либо компании. Мажорная версия выходит раз в год (обычно осенью), каждая поддерживается пять лет; минорные выпуски с исправлениями выходят ежеквартально.[2] Лицензия PostgreSQL License разрешает любое, в том числе коммерческое, использование и модификацию, поэтому на его основе построены многие продукты и облачные сервисы.[3]

## Архитектура

- **Процесс на соединение.** Главный процесс (postmaster) порождает отдельный серверный процесс для каждого клиента. Соединения дороги, поэтому перед базой часто ставят пулер вроде PgBouncer.
- **MVCC.** Изменение строки создаёт её новую версию, а старая остаётся видимой для транзакций, начавшихся раньше. Читатели не блокируют писателей и наоборот.[4] Устаревшие версии убирает фоновый процесс **autovacuum** (см. [MVCC](https://llmdocs.ru/wiki/mvcc.md)).
- **WAL.** Каждое изменение сначала записывается в журнал упреждающей записи (*write-ahead log*), и лишь потом — в файлы данных. Журнал обеспечивает восстановление после сбоя, резервное копирование на момент времени (PITR) и [репликацию](https://llmdocs.ru/wiki/replication.md).[5]
- **Оптимизатор запросов** на основе стоимости собирает статистику по таблицам и выбирает план; посмотреть его можно командой [EXPLAIN](https://llmdocs.ru/wiki/explain.md).

## Возможности

- Полноценные транзакции, включая транзакционный DDL: `CREATE TABLE` или `ALTER TABLE` можно откатить. Все [уровни изоляции](https://llmdocs.ru/wiki/isolation-levels.md), включая настоящий `SERIALIZABLE`.
- Типы данных: массивы, `jsonb` (двоичный JSON с индексами), диапазоны, `uuid`, сетевые адреса, геометрия, перечисления, составные типы.
- [Индексы](https://llmdocs.ru/wiki/database-index.md) нескольких видов: [B-tree](https://llmdocs.ru/wiki/b-tree.md), Hash, GiST, SP-GiST, GIN, BRIN; частичные, по выражениям и покрывающие индексы.[6]
- Оконные функции, рекурсивные CTE, `MERGE`, полнотекстовый поиск, секционирование таблиц.
- Хранимые процедуры на PL/pgSQL, а также на Python, Perl и других языках.
- Физическая (потоковая) и логическая репликация.

## Расширения

Расширение подключается одной командой `CREATE EXTENSION` и может добавлять типы, операторы и методы индексирования. Самые известные:

| Расширение | Назначение |
|---|---|
| PostGIS | геопространственные данные и запросы |
| [pgvector](https://llmdocs.ru/wiki/pgvector.md) | хранение эмбеддингов и векторный поиск |
| pg_stat_statements | статистика выполнения запросов |
| TimescaleDB | временные ряды |
| Citus | распределение таблиц по узлам ([шардирование](https://llmdocs.ru/wiki/sharding.md)) |
| pg_trgm | поиск по сходству строк (триграммы) |

Благодаря расширениям PostgreSQL часто заменяет сразу несколько специализированных систем: документную базу, геоинформационную систему и векторное хранилище для [RAG](https://llmdocs.ru/wiki/rag.md).

## Практика

Быстрее всего запустить PostgreSQL в [Docker](https://llmdocs.ru/wiki/docker.md):

```bash
docker run -d --name pg -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres:18
psql -h localhost -U postgres
```

```sql
-- в psql
\l                 -- список баз
\dt                -- таблицы текущей схемы
\d+ orders         -- структура таблицы
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 42;
```

Полезные практики: включить `pg_stat_statements` для поиска медленных запросов, следить за работой autovacuum на часто обновляемых таблицах, делать резервные копии через `pg_dump` или непрерывное архивирование WAL, а изменения схемы проводить [миграциями](https://llmdocs.ru/wiki/schema-migrations.md). Список изменений по версиям публикуется в примечаниях к выпускам.[7]

## Сравнение

По сравнению с [MySQL](https://llmdocs.ru/wiki/mysql-mariadb.md) PostgreSQL исторически строже к типам и стандарту и богаче возможностями, MySQL — проще в репликации и распространён в веб-хостинге. [SQLite](https://llmdocs.ru/wiki/sqlite.md) — встраиваемая база без сервера, удобная для локальных приложений и тестов. Для аналитики над миллиардами строк используют колоночные СУБД вроде [ClickHouse](https://llmdocs.ru/wiki/clickhouse.md).

## См. также

- [Реляционная база данных](https://llmdocs.ru/wiki/relational-database.md)
- [SQL](https://llmdocs.ru/wiki/sql.md)
- [MVCC](https://llmdocs.ru/wiki/mvcc.md)
- [pgvector и векторные БД](https://llmdocs.ru/wiki/pgvector.md)
- [Репликация баз данных](https://llmdocs.ru/wiki/replication.md)

## Источники

1. [PostgreSQL Documentation — A Brief History of PostgreSQL](https://www.postgresql.org/docs/current/history.html)
2. [PostgreSQL — Versioning Policy](https://www.postgresql.org/support/versioning/)
3. [PostgreSQL — License](https://www.postgresql.org/about/licence/)
4. [PostgreSQL Documentation — Concurrency Control (MVCC)](https://www.postgresql.org/docs/current/mvcc-intro.html)
5. [PostgreSQL Documentation — Write-Ahead Logging](https://www.postgresql.org/docs/current/wal-intro.html)
6. [PostgreSQL Documentation — Index Types](https://www.postgresql.org/docs/current/indexes-types.html)
7. [PostgreSQL Documentation — Release Notes](https://www.postgresql.org/docs/release/)
8. [Stack Overflow Developer Survey — Databases](https://survey.stackoverflow.co/2024/technology#most-popular-technologies-database)
