2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

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 的用户将成为扩展的所有者,以供后续权限检查使用,并且通常也成为扩展脚本创建的任何对象的拥有者。

加载扩展通常需要与创建其组件对象相同的权限。对于许多扩展,这意味着需要超级用户权限。但是,如果扩展在其控制文件中被标记为受信任,则任何对当前数据库具有CREATE 权限的用户都可以安装它。在这种情况下,扩展对象本身将归调用用户所有,但其中的对象将归引导超级用户所有(除非扩展脚本明确将其分配给调用用户)。这种配置授予调用用户删除扩展的权利,但不能修改其中的单个对象。

参数

IF NOT EXISTS

如果同名扩展已存在,则不报错。在这种情况下会发出通知。请注意,无法保证现有扩展与从当前可用的脚本文件创建的扩展有任何相似之处。

extension_name

要安装的扩展名称。PostgreSQL 将使用在服务器的扩展控制路径(通过extension_control_path 设置)中找到的 extension_name.control 文件中的详细信息来创建扩展。

schema_name

如果扩展允许其内容被迁移,则要安装扩展对象的模式名称。指定的模式必须已存在。如果未指定,并且扩展的控制文件也没有指定模式,则将使用当前的默认对象创建模式。

如果扩展在其控制文件中指定了 schema 参数,则不能使用 SCHEMA 子句覆盖该模式。通常,如果给出了 SCHEMA 子句并且它与扩展的 schema 参数冲突,则会引发错误。但是,如果还给出了 CASCADE 子句,则在 schema_name 发生冲突时将被忽略。给定的 schema_name 将用于安装任何不需要在其控制文件中指定 schema 的扩展。

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

version

要安装的扩展版本。这可以写成标识符或字符串字面量。默认版本是扩展控制文件中指定的任何内容。

CASCADE

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

注释

在您可以使用CREATE EXTENSION 将扩展加载到数据库之前,必须安装扩展的支持文件。有关安装PostgreSQL 随附的扩展的信息,请参见 其他随附模块

可以通过 pg_available_extensionspg_available_extension_versions 系统视图来识别当前可加载的扩展。

注意

以超级用户身份安装扩展需要信任扩展的作者以安全的方式编写了扩展安装脚本。一个恶意的用户很容易创建特洛伊木马对象,这些对象会破坏随后执行的粗心编写的扩展脚本,从而使用户获得超级用户权限。但是,特洛伊木马对象仅在脚本执行期间位于 search_path 中时才有危险,这意味着它们位于扩展的安装目标模式或它所依赖的某个扩展的模式中。因此,在处理未经仔细审查的脚本的扩展时,一个好的经验法则是仅将它们安装到未向任何不受信任的用户授予 CREATE 权限的模式中。对于它们依赖的任何扩展也同样如此。

PostgreSQL 随附的扩展被认为可以防止此类安装时攻击,除了少数几个依赖其他扩展的扩展。如这些扩展的文档中所述,它们应安装在安全模式下,或安装在它们所依赖的扩展的相同模式下,或两者兼有。

有关编写新扩展的信息,请参阅 第 36.17 节

示例

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

CREATE EXTENSION hstore SCHEMA addons;

完成同一件事的另一种方法

SET search_path = addons;
CREATE EXTENSION hstore;

兼容性

CREATE EXTENSION 是一个 PostgreSQL 扩展。

提交更正

如果您在文档中看到任何不正确、与您对特定功能的实际体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。