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 將使用在伺服器的擴充套件控制路徑(透過extension_control_path 設定)中找到的
檔案中的詳細資訊來建立擴充套件。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 擴充套件。
如果您在文件中看到任何不正確、與您對特定功能的實際體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。