CREATE SCHEMA

CREATE SCHEMA — определить новую схему

Синтаксис

CREATE SCHEMA имя_схемы [ AUTHORIZATION указание_роли ] [ элемент_схемы [ ... ] ]
CREATE SCHEMA AUTHORIZATION указание_роли [ элемент_схемы [ ... ] ]
CREATE SCHEMA IF NOT EXISTS имя_схемы [ AUTHORIZATION указание_роли ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION указание_роли

Где указание_роли может быть:

    имя_пользователя
  | CURRENT_USER
  | SESSION_USER

Описание

Команда CREATE SCHEMA вносит новую схему в текущую базу данных. Имя схемы должно отличаться от имени любой существующей схемы в текущей базе данных.

Схема по существу является пространством имен: она содержит именованные объекты (таблицы, типы данных, функции и операторы), имена которых могут дублировать имена других объектов, существующих в других схемах. Доступ к именованным объектам осуществляется либо путем «дополнения» их имен именем схемы в качестве префикса, либо путем задания пути поиска, включающего требуемую схему (или схемы). Команда CREATE, в которой указывается неполное имя объекта, создает объект в текущей схеме (той, что стоит в пути поиска первой; узнать ее позволяет функция current_schema).

При необходимости CREATE SCHEMA может включать подкоманды для создания объектов в новой схеме. В целом, подкоманды обрабатываются так же, как и отдельные команды, выполняемые после создания схемы, за исключением того, что при использовании предложения AUTHORIZATION все созданные объекты будут принадлежать указанному пользователю.

Параметры

имя_схемы

Имя создаваемой схемы. Если этот параметр опущен, то в качестве имени схемы используется имя_пользователя. Имя не может начинаться с pg_, поскольку такие имена зарезервированы для системных схем.

имя_пользователя

Имя пользователя (роли), которому будет принадлежать новая схема. Если этот параметр опущен, по умолчанию владельцем становится пользователь, выполняющий команду. Чтобы создать схему, принадлежащую другой роли, необходимо быть непосредственным или опосредованным членом этой роли или суперпользователем.

элемент_схемы

Оператор 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.

См. также

ALTER SCHEMA, DROP SCHEMA