CREATE EXTENSION

CREATE EXTENSION — 安裝延伸功能

語法

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

說明

CREATE EXTENSION 將新的延伸功能載入到目前的資料庫中。載入的延伸功能不能有相同名稱。

載入延伸功能基本上等同於執行延伸功能的腳本檔案。該腳本通常會建立新的 SQL 物件,例如函數、資料型別、運算子和索引演算法。 CREATE EXTENSION 也另外記錄所有已建立物件的識別指標,以便在發出 DROP EXTENSION 時可以刪除它們。

載入延伸功能需要具有建立其群組物件所需的相同權限。對於大多數延伸功能而言,這意味著需要超級使用者或資料庫所有者的權限。執行 CREATE EXTENSION 的使用者將成為延伸功能的所有者,以便以後進行權限檢查,以及延伸功能程序腳本所建立的任何物件所有者。

參數

IF NOT EXISTS

如果已存在相同名稱的延伸功能,請不要拋出錯誤。在這種情況下發出NOTICE。請注意,無法保證現有延伸功能與從目前腳本檔案建立的延伸功能名稱類似。

extension_name

要安裝的延伸功能名稱。PostgreSQL 將使用檔案中的細節資訊建立延伸功能:SHAREDIR/extension/extension_name.control.schema_name

在延伸功能允許其內容能夠重新定位的情況下,用於安裝延伸物件的綱要名稱,其所指定的綱要必須已存在。如果未指定,並且延伸功能的控制檔案也未指定綱要,則使用目前的預設物件綱要建立。

如果延伸功能在其控制檔案中指定了綱要參數,則無法使用 SCHEMA 子句覆蓋該綱要。一般來說,如果使用了 SCHEMA 子句,則會引發錯誤,並且它與延伸功能的 schema 參數衝突。但是,如果還使用了 CASCADE 子句,則在發生衝突時會忽略 schema_name。指定的 schema_name 將用於安裝未在其控制檔案中指定綱要的任何所需延伸功能。

請記住,延伸功能本身不被視為在任何綱要中:延伸功能具有必須在資料庫範圍內唯一的非限定名稱。但是屬於延伸功能的物件可以在特定綱要之中。

version

要安裝的延伸功能版本。這可以寫為識別指標或字串文字。預設版本是延伸功能程序控制檔案中所指定的內容。

old_version

僅當您嘗試安裝替換舊版的延伸功能模組時,必須指定 FROM old_version,該模組只是未打包到延伸功能中的物件集合。此選項使 CREATE EXTENSION 執行替代安裝腳本,該腳本將現有對象吸收到延伸功能中,而不是建立新物件。請注意,SCHEMA 指定包含這些預先存在的物件綱要。

用於 old_version 的值由延伸程序的作者確定,如果有多個版本的舊模組可以升級到延伸功能名稱,則可能會有所不同。對於 9.1 之前 PostgreSQL 提供的標準延伸功能模組,在將模組更新為延伸功能時,請使用 unpackaged for old_version。

CASCADE

自動安裝此延伸功能所相依但尚未安裝的所有延伸功能。它們的相依關連延伸功能也會遞迴自動安裝。如果使用了 SCHEMA 子句,則適用於以這種方式安裝的所有延伸功能。該語句的其他選項不適用於自動安裝的延伸功能;特別要注意的是,始終會選擇安裝其預設的版本。

注意

在使用 CREATE EXTENSION 將延伸功能載入到資料庫之前,必須先安裝延伸功能相關的檔案。有關安裝 PostgreSQL 隨附的延伸功能的資訊,請參閱延伸支援模組

可以從 pg_available_extensionspg_available_extension_versions 系統檢視表中識別目前可載入的延伸功能。

有關撰寫新的延伸功能說明,請參閱第 37.17 節

範例

hstore 延伸功能安裝到目前的資料庫中:

CREATE EXTENSION hstore;

將 hstore 在 9.1 之前版本更新為延伸功能的樣式:

CREATE EXTENSION hstore SCHEMA public FROM unpackaged;

請注意指定現有 hstore 物件所安裝的綱要名稱。

相容性

CREATE EXTENSION 是 PostgreSQL 的延伸功能。

參閱

ALTER EXTENSION, DROP EXTENSION