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 說明對該語言的呼叫控制代碼是安全的; 也就是說,它不會提供給非特權使用者任何繞過訪問限制的能力。 如果忽略這個關鍵字,只有具有 PostgreSQL 超級使用者許可權的人可以使用這個語言建立新的函式。

這是個沒有用的字。

新的過程化語言的名稱。語言名是大小寫無關的。 這個名字應該在資料庫的所有語言中唯一。


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

call_handler 是一個以前註冊過的函式的名字,該函式將被呼叫來執行這門過程語言寫的函式。 過程語言的呼叫控制代碼必須用一種編譯語言書寫,比如 C,呼叫風格必須是版本 1 的呼叫風格, 並且在 PostgreSQL 裡註冊為不接受引數並且返回 language_handler 型別的函式, language_handler 是用於將函式宣告為呼叫控制代碼的佔位符。
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