CREATE SCHEMA

Тема дорожной карты · PostgreSQL

CREATE SCHEMA создаёт именованное пространство имён внутри базы данных PostgreSQL, которое организует таблицы, представления, функции и другие объекты в логические группы — подобно каталогам в файловой системе. Схемы позволяют нескольким приложениям или арендаторам сосуществовать в рамках одной реляционной базы данных без коллизий имён объектов: например, app1.users и app2.users могут существовать одновременно. Параметр конфигурации search_path управляет тем, в каких схемах PostgreSQL выполняет поиск по умолчанию при встрече неквалифицированного имени объекта в запросе; значение search_path = myapp, public в postgresql.conf или команда SET search_path TO myapp, public — стандартный способ ограничить область видимости запросов приложения. Доступ к схемам контролируется с помощью GRANT USAGE ON SCHEMA и GRANT ALL ON ALL TABLES IN SCHEMA, что делает CREATE SCHEMA фундаментальным инструментом для проектирования многоарендной базы данных PostgreSQL и разграничения прав доступа.

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

CREATE SCHEMA организует данные иерархически: кластер → БД → схема → объект (таблица, 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.

Типичные ошибки

Ловушки CREATE SCHEMA: всё в public и через 3 года клубок прав; широкие права на public в 15+ БД ("дефолт с давних пор" — security exposure); забыли search_path в скриптах (запросы ломаются непредсказуемо в зависимости от сессии). \dn периодически — для аудита разрастания схем.

Связанные понятия

Полезные ресурсы