CREATE EXTENSION — 安装扩展
CREATE EXTENSION [ IF NOT EXISTS ]extension_name
[ WITH ] [ SCHEMAschema_name
] [ VERSIONversion
] [ 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
子句覆盖该模式。通常,如果给定的 SCHEMA
子句与扩展的 schema
参数冲突,则会引发错误。但是,如果也给定了 CASCADE
子句,则当发生冲突时,将忽略 schema_name
。给定的 schema_name
将用于安装任何未在其控制文件中指定 schema
的所需扩展。
请记住,扩展本身不被认为位于任何模式中:扩展具有必须在整个数据库中唯一的非限定名称。但是,属于扩展的对象可以位于模式中。
version
要安装的扩展的版本。这可以写成标识符或字符串字面量。默认版本是扩展控制文件中指定的版本。
CASCADE
自动安装此扩展所依赖的任何尚未安装的扩展。它们的依赖项也会以递归方式自动安装。SCHEMA
子句(如果给定)适用于以这种方式安装的所有扩展。语句的其他选项不适用于自动安装的扩展;特别是,始终选择它们的默认版本。
在可以使用 CREATE EXTENSION
将扩展加载到数据库中之前,必须安装扩展的支持文件。有关安装 PostgreSQL 随附的扩展的信息,请参见其他提供的模块。
当前可用于加载的扩展可以通过 pg_available_extensions
或 pg_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 扩展。
如果您在文档中发现任何不正确、与您特定功能的使用体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。