Перейти к основному содержимому

CREATE EXTENSION

примечание

Эта страница переведена при помощи нейросети GigaChat.

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, становится владельцем расширения и, как правило, всех объектов, созданных в ходе установки. Это влияет на проверки прав доступа в будущем.

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

Параметры

IF NOT EXISTS
Подавляет ошибку, если расширение с указанным именем уже существует, вместо этого будет выдано уведомление. При этом нет гарантии, что существующее расширение совпадает с текущей доступной версией сценария установки.
extension_name
Задает имя устанавливаемого расширения. PostgreSQL создаст расширение, используя детали из файла SHAREDIR/extension/extension_name.control.
schema_name
Задает имя схемы, в которую будут установлены объекты расширения (если это допускается настройками расширения). Схема должна существовать заранее. Если схема не указана и не задана в файле расширения, используется схема по умолчанию.

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

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

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

Примечания

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

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

Предупреждение

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

Рекомендуется устанавливать непроверенные расширения только в схемы, к которым не предоставлялись и не будут предоставляться привилегии CREATE ненадежным пользователям. Это относится и ко всем зависимым от них расширениям.

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

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

Примеры

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

CREATE EXTENSION hstore SCHEMA addons;

Другой способ:

SET search_path = addons;
CREATE EXTENSION hstore;

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

CREATE EXTENSION является расширением PostgreSQL.

Смотрите также

ALTER EXTENSION, DROP EXTENSION