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.