Что такое PostgreSQL?

PostgreSQL — реляционная СУБД с открытым исходным кодом. Она хранит данные в таблицах со строгой схемой, поддерживает SQL, транзакции ACID, индексы, представления, JSONB и расширения (PostGIS, pgvector). PostgreSQL часто выбирают как основную OLTP-базу для веб-сервисов и аналитики среднего объёма.
flowchart LR App["Приложение"] -->|SQL| PG["PostgreSQL"] PG --> WAL["WAL / журнал"] PG --> Data["Файлы данных"] WAL --> Replica["Реплика read-only"]
Запись идёт через WAL; реплика может отставать на миллисекунды.
Транзакции и изоляция
Транзакция группирует несколько операций: либо все изменения фиксируются (COMMIT), либо откатываются (ROLLBACK). Уровни изоляции (READ COMMITTED по умолчанию, REPEATABLE READ, SERIALIZABLE) определяют, какие аномалии чтения допустимы. Для финансовых операций и инвентаря важно явно проектировать границы транзакций в коде приложения.
Индексы и производительность
B-tree индекс ускоряет поиск по равенству и диапазонам; GIN подходит для JSONB и полнотекстового поиска. Без индекса на часто фильтруемых колонках запросы деградируют до seq scan. EXPLAIN ANALYZE показывает план выполнения — первый инструмент при медленных запросах.
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
total NUMERIC(12,2) NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_orders_user_created ON orders (user_id, created_at DESC);
Репликация и бэкапы
Streaming replication передаёт WAL на standby-узел для чтения или failover. Логические бэкапы (pg_dump) и физические (base backup + WAL archiving) решают разные задачи восстановления. Для продакшена планируют RPO/RTO заранее, а не после инцидента.
Документация: postgresql.org/docs.


Частые вопросы
Чем PostgreSQL отличается от MySQL?
Оба — реляционные СУБД, но PostgreSQL сильнее в сложных типах (JSONB, массивы), расширяемости и строгом соответствии SQL; выбор часто зависит от команды и экосистемы.
Что такое WAL в PostgreSQL?
Write-Ahead Log — журнал изменений до записи на диск данных. WAL обеспечивает durability и основу для репликации и point-in-time recovery.
Когда использовать JSONB в PostgreSQL?
Когда часть атрибутов гибкая или редко запрашивается, но нужны индексы GIN и SQL поверх документов — без отдельной document-БД.
Другие термины в теме «Базы данных»
Не хватает деталей?
Напишите, что уточнить по теме «PostgreSQL» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).