Postgresql 中文操作指南

CREATE EXTENSION

CREATE EXTENSION — 安装扩展

CREATE EXTENSION — install an extension

Synopsis

CREATE EXTENSION [ IF NOT EXISTS ] extension_name
    [ WITH ] [ SCHEMA schema_name ]
             [ VERSION version ]
             [ CASCADE ]

Description

CREATE EXTENSION 载入一个新扩展至当前数据库。不能已有同名扩展载入。

CREATE EXTENSION loads a new extension into the current database. There must not be an extension of the same name already loaded.

载入一个扩展本质上等于运行扩展的脚本文件。此脚本通常会创建新的 SQL 对象,例如函数、数据类型、运算符和索引支持方法。 CREATE EXTENSION 还会记录所有已创建对象的标识,以便在发出 DROP EXTENSION 时可以再次删除它们。

Loading an extension essentially amounts to running the extension’s script file. The script will typically create new SQL objects such as functions, data types, operators and index support methods. CREATE EXTENSION additionally records the identities of all the created objects, so that they can be dropped again if DROP EXTENSION is issued.

运行 CREATE EXTENSION 的用户将成为此扩展的所有者,以便在后来的权限检查中使用,通常还将成为扩展脚本创建的任何对象的的所有者。

The user who runs CREATE EXTENSION becomes the owner of the extension for purposes of later privilege checks, and normally also becomes the owner of any objects created by the extension’s script.

加载扩展通常需要创建其组件对象所需的权限。对于许多扩展,这意味着需要超级用户权限。但是,如果扩展的控制文件中将扩展标记为 trusted ,则该扩展可以由对当前数据库拥有 CREATE 权限的任何用户安装。在这种情况下,扩展对象本身归调用用户所有,但包含的对象归 bootstrap 超级用户所有(除非扩展的脚本明确将它们分配给调用用户)。此配置赋予调用用户删除该扩展的权限,但无权修改其中的各个对象。

Loading an extension ordinarily requires the same privileges that would be required to create its component objects. For many extensions this means superuser privileges are needed. However, if the extension is marked trusted in its control file, then it can be installed by any user who has CREATE privilege on the current database. In this case the extension object itself will be owned by the calling user, but the contained objects will be owned by the bootstrap superuser (unless the extension’s script explicitly assigns them to the calling user). This configuration gives the calling user the right to drop the extension, but not to modify individual objects within it.

Parameters

  • IF NOT EXISTS

    • Do not throw an error if an extension with the same name already exists. A notice is issued in this case. Note that there is no guarantee that the existing extension is anything like the one that would have been created from the currently-available script file.

  • extension_name

    • The name of the extension to be installed. PostgreSQL will create the extension using details from the file SHAREDIR/extension/extension_name.control.

  • schema_name

    • The name of the schema in which to install the extension’s objects, given that the extension allows its contents to be relocated. The named schema must already exist. If not specified, and the extension’s control file does not specify a schema either, the current default object creation schema is used.

    • If the extension specifies a schema parameter in its control file, then that schema cannot be overridden with a SCHEMA clause. Normally, an error will be raised if a SCHEMA clause is given and it conflicts with the extension’s schema parameter. However, if the CASCADE clause is also given, then schema_name is ignored when it conflicts. The given schema_name will be used for installation of any needed extensions that do not specify schema in their control files.

    • Remember that the extension itself is not considered to be within any schema: extensions have unqualified names that must be unique database-wide. But objects belonging to the extension can be within schemas.

  • version

    • The version of the extension to install. This can be written as either an identifier or a string literal. The default version is whatever is specified in the extension’s control file.

  • CASCADE

    • Automatically install any extensions that this extension depends on that are not already installed. Their dependencies are likewise automatically installed, recursively. The SCHEMA clause, if given, applies to all extensions that get installed this way. Other options of the statement are not applied to automatically-installed extensions; in particular, their default versions are always selected.

Notes

在你可以使用 CREATE EXTENSION 将扩展加载到数据库中之前,必须安装扩展的支持文件。有关安装 PostgreSQL 提供的扩展的信息,请参阅 Additional Supplied Modules

Before you can use CREATE EXTENSION to load an extension into a database, the extension’s supporting files must be installed. Information about installing the extensions supplied with PostgreSQL can be found in Additional Supplied Modules.

当前可用于加载的扩展可以从 pg_available_extensionspg_available_extension_versions 系统视图中识别。

The extensions currently available for loading can be identified from the pg_available_extensions or pg_available_extension_versions system views.

Caution

以超级用户身份安装扩展需要相信扩展的作者以安全的方式编写了扩展安装脚本。对于恶意用户来说,创建特洛伊木马对象并不是一件难事,这些对象会损害粗心编写的扩展脚本的后期执行,从而使用户获得超级用户权限。但是,特洛伊木马对象只有在脚本执行期间位于 search_path 中时才具有危害性,这意味着它们位于扩展的安装目标模式或它所依赖的某个扩展的模式中。因此,在处理尚未经过仔细审查的脚本的扩展时,一个好的经验法则是仅将其安装到 CREATE 权限尚未授予且将来不会授予任何不受信任用户的模式中。它们所依赖的任何扩展也应如此。

Installing an extension as superuser requires trusting that the extension’s author wrote the extension installation script in a secure fashion. It is not terribly difficult for a malicious user to create trojan-horse objects that will compromise later execution of a carelessly-written extension script, allowing that user to acquire superuser privileges. However, trojan-horse objects are only hazardous if they are in the search_path during script execution, meaning that they are in the extension’s installation target schema or in the schema of some extension it depends on. Therefore, a good rule of thumb when dealing with extensions whose scripts have not been carefully vetted is to install them only into schemas for which CREATE privilege has not been and will not be granted to any untrusted users. Likewise for any extensions they depend on.

据信随 PostgreSQL 一起提供的扩展可以防止此类安装时攻击,但依赖于其他扩展的少数扩展除外。如这些扩展文档中所述,应将它们安装到安全的架构中,或者安装到与它们所依赖的扩展相同的架构中,或者同时安装到这两个位置。

The extensions supplied with PostgreSQL are believed to be secure against installation-time attacks of this sort, except for a few that depend on other extensions. As stated in the documentation for those extensions, they should be installed into secure schemas, or installed into the same schemas as the extensions they depend on, or both.

有关编写新扩展的信息,请参阅 Section 38.17

For information about writing new extensions, see Section 38.17.

Examples

hstore 扩展安装到当前数据库,将它的对象置于架构 addons 中:

Install the hstore extension into the current database, placing its objects in schema addons:

CREATE EXTENSION hstore SCHEMA addons;

另一种完成相同操作的方法:

Another way to accomplish the same thing:

SET search_path = addons;
CREATE EXTENSION hstore;

Compatibility

CREATE EXTENSION 是一个 PostgreSQL 扩展。

CREATE EXTENSION is a PostgreSQL extension.