支援的版本: 目前 (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 將使用來自檔案 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_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 擴充套件。

提交更正

如果您發現文件中任何不正確之處、與您使用特定功能的經驗不符,或需要進一步說明,請使用此表單來回報文件問題。