Arch manual pages

CREATE LANGUAGE(7) SQL Commands CREATE LANGUAGE(7)

CREATE LANGUAGE - 定義一種新的過程語言

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
    HANDLER call_handler [ VALIDATOR valfunction ]

使用 CREATE LANGUAGE, 一個PostgreSQL 用戶可以在 PostgreSQL裏註冊一個新的語言。 因而,函數和觸發器過程可以用這種新語言定義。要註冊新語言用戶必須具有 PostgreSQL 超級用戶權限。

CREATE LANGUAGE 將該語言的名字和一個調用句柄關聯起來,而該調用句柄負責執行該語言書寫的函數。 請參考 ``User-Defined Functions'' 獲取有關語言調用句柄的更多信息。

請注意過程語言是對每個獨立的數據庫而言是自己的。 要讓一種語言缺省時可以爲所有數據庫獲得,那你應該把它安裝到 template1 數據庫裏。

TRUSTED
TRUSTED 說明對該語言的調用句柄是安全的; 也就是說,它不會提供給非特權用戶任何繞過訪問限制的能力。 如果忽略這個關鍵字,只有具有 PostgreSQL 超級用戶權限的人可以使用這個語言創建新的函數。
PROCEDURAL
這是個沒有用的字。
name
新的過程化語言的名稱。語言名是大小寫無關的。 這個名字應該在數據庫的所有語言中唯一。

出於向下兼容的原因,這個名字可以用單引號包圍。

HANDLER call_handler
call_handler 是一個以前註冊過的函數的名字,該函數將被調用來執行這門過程語言寫的函數。 過程語言的調用句柄必須用一種編譯語言書寫,比如 C,調用風格必須是版本 1 的調用風格, 並且在 PostgreSQL 裏註冊爲不接受參數並且返回 language_handler 類型的函數, language_handler 是用於將函數聲明爲調用句柄的佔位符。
VALIDATOR valfunction
valfunction 是一個已經註冊的函數的名字, 在用該語言創建新函數的時候將調用它來校驗新函數。如果沒有聲明校驗函數,那麼建立新函數的時候就不會檢查它。 校驗函數必須接受一個類型爲 oid 的參數,它是將要創建的函數的 OID,並且通常會返回 void。

校驗函數通常會檢查函數體,看看看有沒有語法錯誤,但是它也可以查看函數的其它屬性, 比如該語言是否不能處理某種參數類型。要發出一個錯誤,校驗函數應該用 elog() 函數。 該函數的返回值將被忽略。

這條命令通常不應該由用戶直接執行。 對於 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 程序自動給每個人賦予權限。

下面兩條順序執行的命令將註冊一門新的過程語言及其關聯的調用句柄。

CREATE FUNCTION plsample_call_handler() RETURNS language_handler
    AS '$libdir/plsample'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;

CREATE LANGUAGE 是 PostgreSQL 擴展。

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>

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
2003-11-02 SQL - Language Statements