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 扩展。
如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符的内容或需要进一步说明的内容,请使用此表单 报告文档问题。