CREATE EXTENSION — установка расширения
CREATE EXTENSION [ IF NOT EXISTS ]extension_name[ WITH ] [ SCHEMAschema_name] [ VERSIONversion] [ CASCADE ]
Команда CREATE EXTENSION загружает новое расширение в текущую базу данных. Не должно быть уже загруженного расширения с таким же именем.
Загрузка расширения, по сути, сводится к выполнению его файла-скрипта. Этот скрипт обычно создаёт новые объекты SQL, такие как функции, типы данных, операторы и методы поддержки индексов. Кроме того, CREATE EXTENSION записывает идентификаторы всех созданных объектов, чтобы их можно было снова удалить, если будет выполнена команда DROP EXTENSION.
Пользователь, выполняющий CREATE EXTENSION, становится владельцем расширения для последующих проверок привилегий и, как правило, также становится владельцем любых объектов, созданных скриптом расширения.
Для загрузки расширения обычно требуются те же привилегии, которые потребовались бы для создания его составных объектов. Для многих расширений это означает, что необходимы привилегии суперпользователя. Однако, если расширение помечено как доверенное (trusted) в его управляющем файле, его может установить любой пользователь, имеющий привилегию CREATE в текущей базе данных. В этом случае сам объект расширения будет принадлежать вызывающему пользователю, но содержащиеся в нём объекты будут принадлежать начальному суперпользователю (если только скрипт расширения явно не назначает их вызывающему пользователю). Такая конфигурация даёт вызывающему пользователю право удалить расширение, но не право изменять отдельные объекты внутри него.
IF NOT EXISTSНе вызывать ошибку, если расширение с таким именем уже существует. В этом случае выдаётся уведомление. Обратите внимание, что нет гарантии, что существующее расширение хоть как-то похоже на то, которое было бы создано из текущего доступного файла-скрипта.
extension_name
Имя устанавливаемого расширения. Digital Q.DataBase создаст расширение, используя данные из файла SHAREDIR/extension/extension_name.control.
schema_nameИмя схемы, в которую будут установлены объекты расширения, при условии, что расширение позволяет перемещать своё содержимое. Указанная схема должна уже существовать. Если не указано, и в управляющем файле расширения также не указана схема, используется текущая схема по умолчанию для создания объектов.
Если расширение указывает параметр schema в своём управляющем файле, то эту схему нельзя переопределить с помощью предложения SCHEMA. Обычно возникает ошибка, если предложение SCHEMA задано и конфликтует с параметром schema расширения. Однако, если также задано предложение CASCADE, то schema_name игнорируется при конфликте. Заданный schema_name будет использоваться для установки любых необходимых расширений, которые не указывают schema в своих управляющих файлах.
Помните, что само расширение не считается принадлежащим какой-либо схеме: расширения имеют неквалифицированные имена, которые должны быть уникальны в пределах базы данных. Но объекты, принадлежащие расширению, могут находиться в схемах.
versionВерсия устанавливаемого расширения. Это может быть записано либо как идентификатор, либо как строковый литерал. Версия по умолчанию — это та, что указана в управляющем файле расширения.
CASCADE
Автоматически установить любые расширения, от которых зависит данное расширение и которые ещё не установлены. Их зависимости также автоматически устанавливаются рекурсивно. Предложение SCHEMA, если оно задано, применяется ко всем расширениям, установленным таким образом. Другие параметры оператора не применяются к автоматически установленным расширениям; в частности, для них всегда выбираются версии по умолчанию.
Прежде чем использовать CREATE EXTENSION для загрузки расширения в базу данных, вспомогательные файлы расширения должны быть установлены. Информацию об установке расширений, поставляемых с Digital Q.DataBase, можно найти в разделе Дополнительные поставляемые модули.
Расширения, доступные в данный момент для загрузки, можно определить из системных представлений pg_available_extensions или pg_available_extension_versions.
Установка расширения от имени суперпользователя требует доверия к тому, что автор расширения написал скрипт установки безопасным образом. Злонамеренному пользователю не так уж сложно создать объекты-трояны, которые скомпрометируют последующее выполнение небрежно написанного скрипта расширения, позволив этому пользователю получить привилегии суперпользователя. Однако объекты-трояны опасны только в том случае, если они находятся в search_path во время выполнения скрипта, то есть в целевой схеме установки расширения или в схеме какого-либо расширения, от которого оно зависит. Поэтому хорошим эмпирическим правилом при работе с расширениями, скрипты которых не были тщательно проверены, является установка их только в те схемы, для которых привилегия CREATE не была и не будет предоставлена каким-либо ненадёжным пользователям. То же самое относится и к любым расширениям, от которых они зависят.
Считается, что расширения, поставляемые с Digital Q.DataBase, защищены от атак такого рода во время установки, за исключением нескольких, которые зависят от других расширений. Как указано в документации по этим расширениям, они должны быть установлены в защищённые схемы, или установлены в те же схемы, что и расширения, от которых они зависят, или и то, и другое.
Информацию о написании новых расширений см. в разделе Раздел 5.1.17.
Установите расширение hstore в текущую базу данных, поместив его объекты в схему addons:
CREATE EXTENSION hstore SCHEMA addons;
Другой способ достичь того же:
SET search_path = addons; CREATE EXTENSION hstore;
CREATE EXTENSION является расширением Digital Q.DataBase.