受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

CREATE EXTENSION

CREATE EXTENSION — 安装一个扩展

Synopsis

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将根据 文件 extension_name.control 中的详细信息创建该扩展;该文件通过服务器的扩展控制路径找到 (由 extension_control_path 设置)。

schema_name

如果该扩展允许其内容被重定位,则这是安装该扩展所含对象的模式名称。 指定的模式必须已经存在。如果未指定,并且扩展控制文件中也未指定 模式,则使用当前默认的对象创建模式。

如果扩展在其控制文件中指定了 schema 参数, 就不能用 SCHEMA 子句覆盖该模式。通常,如果给出 了 SCHEMA 子句,且它与扩展的 schema 参数冲突,就会报错。不过,如果同时给出 CASCADE 子句,则发生冲突时会忽略 schema_name。给定的 schema_name 将用于 安装任何必需且其控制文件中未指定 schema 的扩展。

请记住,扩展本身不被视为属于任何模式:扩展的名称是非限定名, 并且必须在整个数据库范围内唯一。但是,属于该扩展的对象可以位于 模式中。

version

要安装的扩展版本。它可以写成标识符,也可以写成字符串常量。 默认版本由扩展控制文件指定。

CASCADE

自动安装该扩展所依赖、但尚未安装的任何扩展。它们的依赖也会以同样 的方式递归自动安装。如果给出了 SCHEMA 子句, 它将适用于所有以这种方式安装的扩展。该语句的其他选项不会应用于 自动安装的扩展;特别是,这些扩展总是选择其默认版本。

注解

在使用 CREATE EXTENSION 将扩展装载到数据库之前, 必须先安装好该扩展的支持文件。关于安装 PostgreSQL 随附扩展的信息,可见 额外提供的模块

当前可供装载的扩展可从系统视图 pg_available_extensionspg_available_extension_versions 中查出。

Caution

以超级用户身份安装扩展,意味着必须相信扩展作者以安全的方式编写了 扩展安装脚本。恶意用户要创建特洛伊木马对象并不算太难;这类对象可能 会在之后执行编写粗心的扩展脚本时实施攻击,使该用户获得超级用户权限。 不过,只有当特洛伊木马对象在脚本执行期间位于 search_path 中时,它们才会构成危险;这意味着它们 位于扩展的安装目标模式中,或位于它所依赖的某个扩展所属的模式中。 因此,处理那些脚本尚未经过仔细审查的扩展时,一个经验法则是: 只把它们安装到从未向任何不受信任用户授予、而且今后也不会授予 CREATE 权限的模式中。它们所依赖的任何扩展也应如此。

一般认为,PostgreSQL 随附的扩展能够抵御 这类安装时攻击,但少数依赖其他扩展的扩展除外。正如这些扩展的文档所 述,它们应当安装到安全模式中,或者安装到与其所依赖扩展相同的模式中, 或者同时满足这两点。

关于编写新扩展的信息,见 Section 36.17

示例

hstore 扩展安装到当前数据库中,并把 其对象放在 addons 模式中:

CREATE EXTENSION hstore SCHEMA addons;

实现同样效果的另一种方式是:

SET search_path = addons;
CREATE EXTENSION hstore;

兼容性

CREATE EXTENSIONPostgreSQL 的扩展。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。