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гдеrole_specificationможет быть: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
TABLE, CREATE VIEW, CREATE
INDEX, CREATE SEQUENCE, CREATE
TRIGGER и GRANT допускаются в качестве предложений
внутри команды CREATE SCHEMA. Объекты других типов могут
создаваться отдельными командами после создания схемы.
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, а также большего числа типов подкоманд, чем поддерживается в настоящее время в
Digital Q.DataBase.
Стандарт SQL определяет, что подкоманды в CREATE
SCHEMA могут следовать в произвольном порядке. Текущая
Digital Q.DataBase реализация не поддерживает все случаи опережающих ссылок в подкомандах; иногда может потребоваться изменение порядка подкоманд во избежание опережающих ссылок.
Согласно стандарту SQL, владелец схемы всегда является владельцем всех объектов в ней. Digital Q.DataBase
допускает наличие в схемах объектов, принадлежащих пользователям, отличным от владельца схемы. Это возможно только в том случае, если владелец схемы предоставляет
CREATE привилегию доступа к своей схеме другому пользователю или если объекты в ней создает суперпользователь.
Параметр IF NOT EXISTS является
Digital Q.DataBase расширением.