xenial (7) create_language.7.gz

NAME
CREATE LANGUAGE - 定義一種新的過程語言
SYNOPSIS
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name HANDLER call_handler [ VALIDATOR valfunction ]
DESCRIPTION 描述
使用 CREATE LANGUAGE, 一個PostgreSQL 使用者可以在 PostgreSQL裏注冊一個新的語言。 因而,函數和觸發器過程 可以用這種新語言定義。要注冊新語言使用者必須具有 PostgreSQL 超級使用者權限。 CREATE LANGUAGE 將該語言的名字和一個調用句柄關聯起來,而該調用句柄負責執行該語言書寫的函數。 請參考 ``User-Defined Functions'' 獲取有關語言調用句柄的更多信息。 請注意過程語言是對每個獨立的數據庫而言是自己的。 要讓一種語言預設時可以為所有數據庫獲得,那你應該把它安 裝到 template1 數據庫裏。
PARAMETERS 參數
TRUSTED TRUSTED 說明對該語言的調用句柄是安全的; 也就是說,它不會提供給非特權使用者任何繞過訪問限制的能 力。 如果忽略這個關鍵字,只有具有 PostgreSQL 超級使用者權限的人可以使用這個語言創建新的函數。 PROCEDURAL 這是個沒有用的字。 name 新的過程化語言的名稱。語言名是大小寫無關的。 這個名字應該在數據庫的所有語言中唯一。 出於向下相容的原因,這個名字可以用單引號包圍。 HANDLER call_handler call_handler 是一個以前注冊過的函數的名字,該函數將被調用來執行這門過程語言寫的函數。 過程語言的調 用句柄必須用一種編譯語言書寫,比如 C,調用風格必須是版本 1 的調用風格, 並且在 PostgreSQL 裏注冊為 不接受參數並且返回 language_handler 類型的函數, language_handler 是用於將函數聲明為調用句柄的佔位 符。 VALIDATOR valfunction valfunction 是一個已經注冊的函數的名字, 在用該語言創建新函數的時候將調用它來校驗新函數。如果沒有 聲明校驗函數,那麼建立新函數的時候就不會檢查它。 校驗函數必須接受一個類型為 oid 的參數,它是將要創 建的函數的 OID,並且通常會返回 void。 校驗函數通常會檢查函數體,看看看有沒有語法錯誤,但是它也可以查看函數的其它屬性, 比如該語言是否不 能處理某種參數類型。要發出一個錯誤,校驗函數應該用 elog() 函數。 該函數的返回值將被忽略。
NOTES 注意
這條命令通常不應該由使用者直接執行。 對於 PostgreSQL 版本裏提供的過程語言, 我們應該使用 createlang(1) 程式, 它將為我們安裝正確的調用句柄。 (createlang 也會在內部調用 CREATE LANGUAGE。) 在 PostgreSQL 版本 7.3 之前, 我們必須聲明句柄函數返回佔位類型 opaque,而不是 language_handler。 為了支 持裝載舊的轉儲檔案,CREATE LANGUAGE 還將接受聲明為返回 opaque 的函數, 但是它會發出一條通知並且把函數聲明 返回類型改為 language_handler。 使用 CREATE FUNCTION [create_function(7)] 命令創建新函數。 使用 DROP LANGUAGE [drop_language(7)],或者更好是 droplang(1) 程式刪除一個過程語言。 系統表 pg_language (參閱 ``System Catalogs'') 記錄了更多有關當前安裝的過程語言的信息。createlang 也有 一個選項列出已安裝的語言。 目前,除了權限之外,一種過程語言創建之後它的定義就不能再更改。 要使用一種過程語言,使用者必須被賦予 USAGE 權限。 如果該語言已知是可信的,那麼 createlang 程式自動給每個 人賦予權限。
EXAMPLES 例子
下面兩條順序執行的命令將注冊一門新的過程語言及其關聯的調用句柄。 CREATE FUNCTION plsample_call_handler() RETURNS language_handler AS '$libdir/plsample' LANGUAGE C; CREATE LANGUAGE plsample HANDLER plsample_call_handler;
COMPATIBILITY 相容性
CREATE LANGUAGE 是 PostgreSQL 擴展。
SEE ALSO 參見
ALTER LANGUAGE [alter_language(7)], CREATE FUNCTION [create_function(l)], DROP LANGUAGE [drop_language(l)], GRANT [grant(l)], REVOKE [revoke(l)], createlang(1), droplang(1)
譯者
Postgresql 中文網站 何偉平 <laser@pgsqldb.org>