CREATE SCHEMA
Определяет новую схему.
Синтаксис
CREATE SCHEMA <schema_name> [AUTHORIZATION <user_name>]
[<schema_element> [ ... ]]
CREATE SCHEMA AUTHORIZATION <role_name> [<schema_element> [ ... ]]
CREATE SCHEMA IF NOT EXISTS <schema_name> [ AUTHORIZATION <user_name> ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION <user_name>
Описание
CREATE SCHEMA добавляет новую схему в текущую базу данных.
Имя схемы должно отличаться от имени любой существующей схемы в текущей базе данных.
Схема по сути является пространством имен.
Она содержит именованные объекты (таблицы, типы данных, функции и операторы), имена которых могут совпадать с именами других объектов, существующих в других схемах.
Доступ к именованным объектам осуществляется либо путем указания имени схемы в качестве префикса (квалификации имени), либо путем задания пути поиска (search path), включающего нужную схему (или схемы).
Команда CREATE, в которой указано неквалифицированное имя объекта, создает объект в текущей схеме (то есть в схеме, стоящей первой в пути поиска, что можно определить с помощью функции current_schema()).
При необходимости CREATE SCHEMA может включать подкоманды для создания объектов внутри новой схемы.
Эти подкоманды по сути обрабатываются так же, как отдельные команды, выполненные после создания схемы, за исключением того, что при использовании выражения AUTHORIZATION все созданные объекты будут принадлежать этой роли.
Параметры
| Параметр | Описание |
|---|---|
schema_name |
Имя создаваемой схемы.
Если параметр опущен, в качестве имени схемы используется имя пользователя.
Имя не может начинаться с |
user_name |
Имя роли, которой будет принадлежать схема. Если параметр опущен, по умолчанию используется роль, выполняющая команду. Только суперпользователи могут создавать схемы, принадлежащие ролям, отличным от них самих |
schema_element |
SQL-оператор, определяющий объект, который должен быть создан внутри схемы.
В настоящее время в качестве выражений внутри |
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;
Совместимость
Стандарт SQL допускает выражение DEFAULT CHARACTER SET в команде CREATE SCHEMA, а также больше типов подкоманд, чем в настоящее время принимает Greengage DB.
Стандарт SQL определяет, что подкоманды в CREATE SCHEMA могут располагаться в любом порядке.
Текущая реализация Greengage DB обрабатывает не все случаи ссылок на еще не объявленные объекты (forward references) в подкомандах.
Иногда может потребоваться переставить подкоманды таким образом, чтобы избежать наличия ссылок на еще не объявленные объекты.
Согласно стандарту SQL, владелец схемы всегда владеет всеми объектами внутри нее.
Greengage DB допускает наличие в схемах объектов, принадлежащих пользователям, отличным от владельца схемы.
Это возможно, только если владелец схемы предоставит кому-то привилегию CREATE на схему либо если суперпользователь решит создавать в ней объекты.
Опция IF NOT EXISTS является расширением Greengage DB.