Базы данных и схемы
Тема дорожной карты · PostgreSQL
В PostgreSQL кластер баз данных содержит несколько независимых баз данных, каждая из которых, в свою очередь, включает одну или несколько схем — двухуровневую иерархию пространств имён, являющуюся основой организации объектов в реляционной базе данных. Базы данных обеспечивают полную изоляцию: соединения, транзакции и видимость объектов ограничены текущей базой данных, а межбазовые запросы нативно невозможны без таких расширений, как postgres_fdw. Внутри одной базы данных схемы служат логическими контейнерами для таблиц, представлений, функций, последовательностей и индексов; переменная search_path — настраиваемая через SET search_path TO myschema, public или постоянно через ALTER ROLE — управляет разрешением неквалифицированных имён. Понимание взаимосвязи между базами данных и схемами необходимо для многоарендной архитектуры PostgreSQL, где выбор между базами данных на каждого арендатора (полная изоляция, большие накладные расходы) и схемами на каждого арендатора (более лёгкий подход, общий пул соединений) непосредственно влияет на оптимизацию запросов, ограничения max_connections и простоту эксплуатации.
Как это работает
Базы данных и схемы организует данные иерархически: кластер → БД → схема → объект (таблица, view, функция). Дефолтная схема — public; можно создать app, analytics, staging для пространств имён. search_path контролирует, по каким схемам ищутся неполные имена. Cross-database запросы НЕ разрешены (используйте foreign data wrappers); cross-schema — бесшовны. Роли (юзеры + группы) владеют объектами; права каскадятся через GRANT/REVOKE.
Когда применять
Схемы — для пространств имён логических модулей одного приложения (auth.users, billing.invoices): держит монолитную БД организованной без раздела на отдельные. Отдельные БД — для настоящего tenancy или полностью независимых приложений. Создавайте выделенную роль на каждый сервис (auth_service, billing_service); никогда не гоняйте под superuser postgres.
Типичные ошибки
Ловушки Базы данных и схемы: всё в public и через 3 года клубок прав; широкие права на public в 15+ БД ("дефолт с давних пор" — security exposure); забыли search_path в скриптах (запросы ломаются непредсказуемо в зависимости от сессии). \dn периодически — для аудита разрастания схем.