| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
HANDLER call_handler [ VALIDATOR valfunction ]使用 CREATE LANGUAGE, 一個PostgreSQL 用戶可以在 PostgreSQL裡註冊一個新的語言。 因而,函數和觸發器過程可以用這種新語言定義。要註冊新語言用戶必須具有 PostgreSQL 超級用戶權限。
CREATE LANGUAGE 將該語言的名字和一個調用句柄關聯起來,而該調用句柄負責執行該語言書寫的函數。 請參考 Chapter 34 獲取有關語言調用句柄的更多訊息。
請注意過程語言是對每個獨立的資料庫而言是自己的。 要讓一種語言預設時可以為所有資料庫獲得,那您應該把它安裝到 template1 資料庫裡。
TRUSTED 說明對該語言的調用句柄是安全的; 也就是說,它不會提供給非特權用戶任何繞過訪問限制的能力。 如果忽略這個關鍵字,只有具有 PostgreSQL 超級用戶權限的人可以使用這個語言建立新的函數。
這是個沒有用的字。
新的過程化語言的名稱。語言名是大小寫無關的。 這個名字應該在資料庫的所有語言中唯一。
出於向下兼容的原因,這個名字可以用單引號包圍。
call_handler 是一個以前註冊過的函數的名字,該函數將被調用來執行這門過程語言寫的函數。 過程語言的調用句柄必須用一種編譯語言書寫,比如 C,調用風格必須是版本 1 的調用風格, 並且在 PostgreSQL 裡註冊為不接受參數並且返回 language_handler 類型的函數, language_handler 是用於將函數聲明為調用句柄的佔位符。
valfunction 是一個已經註冊的函數的名字, 在用該語言建立新函數的時候將調用它來檢驗新函數。如果沒有聲明檢驗函數,那麼建立新函數的時候就不會檢查它。 檢驗函數必須接受一個類型為 oid 的參數,它是將要建立的函數的 OID,並且通常會返回 void。
檢驗函數通常會檢查函數體,看看看有沒有語法錯誤,但是它也可以查看函數的其它屬性, 比如該語言是否不能處理某種參數類型。要發出一個錯誤,檢驗函數應該用 elog() 函數。 該函數的返回值將被忽略。
這條命令通常不應該由用戶直接執行。 對於 PostgreSQL 版本裡提供的過程語言, 我們應該使用 createlang 程序, 它將為我們安裝正確的調用句柄。 (createlang 也會在內部調用 CREATE LANGUAGE。)
在 PostgreSQL 版本 7.3 之前, 我們必須聲明句柄函數返回佔位類型 opaque,而不是 language_handler。 為了支援裝載舊的轉儲文件,CREATE LANGUAGE 還將接受聲明為返回 opaque 的函數, 但是它會發出一條通知並且把函數聲明返回類型改為 language_handler。
使用 CREATE FUNCTION 命令建立新函數。
使用 DROP LANGUAGE,或者更好是 droplang 程序刪除一個過程語言。
系統資料表 pg_language (參閱 Section 41.18) 記錄了更多有關目前安裝的過程語言的訊息。createlang 也有一個選項列出已安裝的語言。
要使用一種過程語言,用戶必須被賦予 USAGE 權限。 如果該語言已知是可信的,那麼 createlang 程序自動給每個人賦予權限。