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_, поскольку такие имена зарезервированы для системных схем.
имя_пользователя
Имя роли пользователя, которому будет принадлежать новая схема. Если этот параметр опущен, по умолчанию владельцем становится пользователь, выполняющий команду. Чтобы создать схему, принадлежащую другой роли, необходимо быть непосредственным или опосредованным членом этой роли или суперпользователем.
элемент_схемы
Оператор 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.