CREATE EXTENSION#

CREATE EXTENSION

CREATE EXTENSION

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

Синтаксис

CREATE EXTENSION [ IF NOT EXISTS ] extension_name
    [ WITH ] [ SCHEMA schema_name ]
             [ VERSION version ]
             [ CASCADE ]

Описание

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

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

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

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

Параметры

IF NOT EXISTS

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

extension_name

Имя расширения, которое нужно установить. Tantor SE создаст расширение, используя детали из файла SHAREDIR/extension/extension_name.control.

schema_name

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

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

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

version

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

CASCADE

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

Примечания

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

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

Предостережение

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

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

Для получения информации о написании новых расширений см. Раздел 36.16.

Примеры

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

CREATE EXTENSION hstore SCHEMA addons;

Другой способ достичь того же результата:

SET search_path = addons;
CREATE EXTENSION hstore;

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

CREATE EXTENSION - это расширение Tantor SE.