CREATE SCHEMA#

CREATE SCHEMA

CREATE SCHEMA

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

Синтаксис

CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification

where role_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.

См. также

ALTER SCHEMA, DROP SCHEMA