CREATE SCHEMA#
CREATE SCHEMA
CREATE SCHEMA — определить новую схему
Синтаксис
CREATE SCHEMAschema_name
[ AUTHORIZATIONrole_specification
] [schema_element
[ ... ] ] CREATE SCHEMA AUTHORIZATIONrole_specification
[schema_element
[ ... ] ] CREATE SCHEMA IF NOT EXISTSschema_name
[ AUTHORIZATIONrole_specification
] CREATE SCHEMA IF NOT EXISTS AUTHORIZATIONrole_specification
whererole_specification
can be:user_name
| CURRENT_ROLE | CURRENT_USER | SESSION_USER
Описание
CREATE SCHEMA
вводит новую схему
в текущую базу данных.
Имя схемы должно отличаться от имени любой существующей схемы
в текущей базе данных.
Схема в основном является пространством имен: она содержит именованные объекты (таблицы, типы данных, функции и операторы), их имена могут дублировать имена других объектов, существующих в других схемах. Именованные объекты доступны либо путем “указания” их имен с префиксом имени схемы, либо путем установки пути поиска, который включает желаемые схемы. Команда CREATE
, указывающая неполное имя объекта, создает объект в текущей схеме (той, которая находится в начале пути поиска, который можно определить с помощью функции current_schema
).
Опционально, CREATE SCHEMA
может включать подкоманды для создания объектов внутри новой схемы. Подкоманды обрабатываются практически так же, как отдельные команды, выполняемые после создания схемы, за исключением того, что если используется AUTHORIZATION
, все созданные объекты будут принадлежать этому пользователю.
Параметры
schema_name
Создается схема с указанным именем. Если имя не указано, используется имя пользователя
user_name
. Имя не может начинаться сpg_
, так как такие имена зарезервированы для системных схем.user_name
Имя роли пользователя, который будет владельцем новой схемы. Если опущено, по умолчанию используется пользователь, выполняющий команду. Чтобы создать схему, принадлежащую другой роли, вы должны иметь возможность
SET ROLE
на эту роль.schema_element
SQL-запрос, определяющий объект, который будет создан внутри схемы. В настоящее время в качестве подчиненных элементов внутри
CREATE SCHEMA
принимаются толькоCREATE TABLE
,CREATE VIEW
,CREATE INDEX
,CREATE SEQUENCE
,CREATE TRIGGER
иGRANT
. Другие типы объектов могут быть созданы в отдельных командах после создания схемы.IF NOT EXISTS
Не выполняйте никаких действий (кроме выдачи уведомления), если схема с таким же именем уже существует. Подкоманды
schema_element
не могут быть включены при использовании этой опции.
Примечания
Для создания схемы пользователь, вызывающий операцию, должен иметь привилегию 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 позволяет использовать фразу DEFAULT CHARACTER SET
в команде CREATE SCHEMA
, а также больше типов подкоманд, чем в настоящее время принимает Tantor BE.
Стандарт SQL определяет, что подкоманды в CREATE SCHEMA
могут появляться в любом порядке. В текущей реализации Tantor BE не обрабатывает все случаи прямых ссылок в подкомандах; иногда может потребоваться переупорядочить подкоманды, чтобы избежать прямых ссылок.
Согласно стандарту SQL, владелец схемы всегда владеет всеми объектами внутри нее. Tantor BE позволяет схемам содержать объекты, принадлежащие пользователям, отличным от владельца схемы. Это может произойти только в том случае, если владелец схемы предоставляет привилегию CREATE
на свою схему кому-то другому, или суперпользователь решает создать объекты в ней.
Опция IF NOT EXISTS
является расширением Tantor BE.