CREATE EXTENSION

CREATE EXTENSION — установить расширение

Синтаксис

CREATE EXTENSION [ IF NOT EXISTS ] имя_расширения
    [ WITH ] [ SCHEMA имя_схемы ]
             [ VERSION версия ]
             [ CASCADE ]

Описание

Команда CREATE EXTENSION загружает в текущую базу данных новое расширение. Уже загруженного расширения с тем же именем в базе быть не должно.

Загрузка расширения по существу сводится к запуску файла скрипта расширения. Скрипт обычно создает новые объекты SQL, например: функции, типы данных, операторы и методы поддержки индексов. CREATE EXTENSION дополнительно записывает идентификаторы всех созданных объектов, так что впоследствии их можно снова удалить, выполнив команду DROP EXTENSION.

Пользователь, запускающий CREATE EXTENSION, становится владельцем расширения для последующих проверок доступа, а также, как правило, владельцем всех объектов, созданных скриптом расширения.

Для загрузки расширения требуются те же права доступа, что и для создания составляющих его объектов. Для большинства расширений это означает, что необходимы права суперпользователя или владельца базы данных. Однако если расширение помечено в своем управляющем файле как trusted (доверенное), его может установить любой пользователь с правом CREATE в текущей базе данных. В этом случае сам объект расширения будет принадлежать вызывающему пользователю, но владельцем содержащихся в нем объектов будет первоначальный суперпользователь (если только скрипт расширения явно не назначит их владельцем вызывающего пользователя). Эта конфигурация дает вызывающему пользователю право удалить расширение, но не модифицировать отдельные объекты внутри него.

Параметры

IF NOT EXISTS

Не выдавать ошибку, если расширение с тем же именем уже существует. В этом случае будет выдано соответствующее уведомление. Обратите внимание, что нет никакой гарантии, что существующее расширение как-то соотносится с тем, которое было бы создано из доступного в данный момент скрипта.

имя_расширения

Имя устанавливаемого расширения. QHB создаст расширение, используя сведения из файла SHAREDIR/extension/имя_расширения.control.

имя схемы

Имя схемы, в которой будут устанавливаться объекты расширения (при условии, что расширение позволяет перемещать его содержимое). Названная схема уже должна существовать. Если этот параметр не указан, а в управляющем файле расширения также не указана схема, то используется текущая схема создания объекта по умолчанию.

Если в управляющем файле расширения задается параметр schema, то эту схему нельзя переопределить предложением SCHEMA. Обычно при указании предложения SCHEMA возникает ошибка, если эта схема конфликтует с параметром schema данного расширения. Однако если также задано предложение CASCADE, то в случае конфликта имя_схемы игнорируется. Заданное имя_схемы будет использоваться для установки любых необходимых расширений, если в их управляющем файле не указана schema.

Помните, что само расширение не считается частью какой-либо схемы: расширения имеют неполные имена, которые должны быть уникальными для всей базы данных. Но объекты, принадлежащие расширению, могут находиться внутри схем.

версия

Версия расширения. Ее можно записать в виде идентификатора или строкового значения. Версия по умолчанию указана в управляющем файле расширения.

CASCADE

Автоматически устанавливать все расширения, от которых зависит это расширение и которые еще не установлены. Их зависимости также устанавливаются автоматически, рекурсивно. Предложение SCHEMA (если указано) применяется ко всем расширениями, которые устанавливаются таким образом. Другие параметры инструкции не применяются к автоматически устанавливаемым расширениями; в частности, всегда выбираются их версии по умолчанию.

Примечания

Прежде чем использовать CREATE EXTENSION для загрузки расширения в базу данных, необходимо установить файлы его поддержки. Информацию об установке расширений, поставляемых с QHB, можно найти в разделе Расширения QHB.

Расширения, доступные для загрузки в настоящее время, можно найти в системных представлениях pg_available_extensions или pg_available_extension_versions.

Внимание
Установка расширение от имени суперпользователя требует уверенности в том, что автор расширения написал его установочный скрипт безопасным образом. Для злоумышленного пользователя не составит особого труда создать объекты типа троянского коня, которые впоследствии скомпрометируют выполнение небрежно написанного скрипта расширения, позволив этому пользователю получить права суперпользователя. Однако такие объекты опасны, только если находятся в пути search_path во время выполнения скрипта, то есть если они находятся в схеме, в которую устанавливается расширение, или в схеме, где располагается другое расширение, от которого зависит первое. Таким образом, имея дело с расширениями, скрипты которых не были тщательно проверены, рекомендуется устанавливать их только в те схемы, для которых недоверенные пользователи не имеют и не будут иметь права CREATE. То же самое касается других расширений, от которых они зависят.

Расширения, поставляемые в составе QHB, можно считать защищенными от подобного рода атак времени выполнения, за исключением некоторых, зависящих от других расширений. Как отмечается в документации таких расширений, их следует устанавливать в безопасные схемы и/или в те же схемы, в которые устанавливаются требующиеся им расширения.

Дополнительную информацию о создании новых расширений см. в разделе Упаковка связанных объектов в расширение.

Примеры

Установка расширения hstore в текущую базу данных с размещением его объектов в схеме addons:

CREATE EXTENSION hstore SCHEMA addons;

Еще один способ сделать вышеописанную операцию:

SET search_path = addons;
CREATE EXTENSION hstore;

Совместимость

Команда CREATE EXTENSION является расширением QHB.

См. также

ALTER EXTENSION, DROP EXTENSION