CREATE SCHEMA
CREATE SCHEMA — определить новую схему
Синтаксис
CREATE SCHEMA имя_схемы [ AUTHORIZATION описание_роли ] [ элемент_схемы [ ... ] ]
CREATE SCHEMA AUTHORIZATION описание_роли [ элемент_схемы [ ... ] ]
CREATE SCHEMA IF NOT EXISTS имя_схемы [ AUTHORIZATION описание_роли ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION описание_роли
где описанием_роли может быть:
имя_пользователя
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER
Описание
Команда CREATE SCHEMA вносит новую схему в текущую базу данных. Имя схемы
должно отличаться от имени любой существующей схемы в текущей базе данных.
Схема по существу является пространством имен: она содержит именованные объекты
(таблицы, типы данных, функции и операторы), имена которых могут дублировать имена
других объектов, существующих в других схемах. Доступ к именованным объектам
осуществляется либо путем «дополнения» их имен именем схемы в качестве префикса,
либо путем задавания пути поиска, включающего требуемую схему (или схемы). Команда
CREATE, в которой указывается неполное имя объекта, создает объект в текущей
схеме (той, что стоит в пути поиска первой; определить ее позволяет функция
current_schema).
При необходимости CREATE SCHEMA может включать подкоманды для создания
объектов в новой схеме. В целом, подкоманды обрабатываются так же, как и
отдельные команды, выполняемые после создания схемы, за исключением того, что при
использовании предложения AUTHORIZATION все созданные объекты будут принадлежать
указанному пользователю.
Параметры
имя_схемы
Имя создаваемой схемы. Если этот параметр опущен, то в качестве имени схемы используется имя_пользователя. Имя не может начинаться с pg_, поскольку такие имена зарезервированы для системных схем.
имя_пользователя
Имя роли пользователя, которому будет принадлежать новая схема. Если этот параметр
опущен, по умолчанию владельцем становится пользователь, выполняющий команду.
Чтобы создать схему, принадлежащую другой роли, необходимо иметь возможность
выполнять SET ROLE для этой роли.
элемент_схемы
Команда SQL, определяющая объект, который должен быть создан в схеме. В настоящее
время в качестве предложений в команде CREATE SCHEMA принимаются только команды
CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATE SEQUENCE, CREATE TRIGGER
и GRANT. Другие виды объектов можно создать в отдельных командах после создания
схемы.
IF NOT EXISTS
Не делать ничего (только выдать уведомление), если схема с тем же именем уже существует. Когда используется это указание, такая команда не может содержать подкоманды элемент_схемы.
Примечания
Чтобы создать схему, необходимо иметь право CREATE в текущей базе данных. (Разумеется, суперпользователи эту проверку игнорируют.)
Примеры
Создание схемы:
CREATE SCHEMA myschema;
Создание схемы для пользователя joe; схема тоже получит имя joe:
CREATE SCHEMA AUTHORIZATION joe;
Создание схемы с именем test, владельцем которой будет пользователь joe, если только схема test еще не существует. (Является ли пользователь joe владельцем существующей схемы, значения не имеет.)
CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;
Создание схемы, в которой сразу создаются таблица и представление:
CREATE SCHEMA hollywood
CREATE TABLE films (title text, release date, awards text[])
CREATE VIEW winners AS
SELECT title, release FROM films WHERE awards IS NOT NULL;
Обратите внимание, что отдельные подкоманды не завершаются точкой с запятой.
Следующие команды приводят к тому же результату другим способом:
CREATE SCHEMA hollywood;
CREATE TABLE hollywood.films (title text, release date, awards text[]);
CREATE VIEW hollywood.winners AS
SELECT title, release FROM hollywood.films WHERE awards IS NOT NULL;
Совместимость
Стандарт SQL допускает в команде CREATE SCHEMA предложение DEFAULT CHARACTER
SET и дополнительные типы подкоманд, которые QHB в настоящее
время не принимает.
Стандарт SQL указывает, что подкоманды в CREATE SCHEMA можно указывать в любом
порядке. Текущая реализация QHB воспринимает не все случаи
ссылок вперед в подкомандах; иногда может потребоваться изменить их порядок, чтобы
избежать таких ссылок.
Согласно стандарту SQL, владелец схемы всегда владеет всеми объектами внутри нее. QHB позволяет схемам содержать объекты, принадлежащие пользователям, отличным от владельца схемы. Это может произойти, только если владелец схемы предоставляет право CREATE в своей схеме кому-то другому, либо если объекты в ней создает суперпользователь.
Указание IF NOT EXISTS является расширением QHB.