Provided by:
manpages-zh_1.5-1_all 
NAME
CREATE LANGUAGE - 定義一種新的過程語言
SYNOPSIS
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
HANDLER call_handler [ VALIDATOR valfunction ]
DESCRIPTIONyz
使用 CREATE LANGUAGE, 一紞ostgreSQL 使用者可以在 PostgreSQL裏注冊一-
虓s的語言。 因而,函數和觸發器過程可以用這種新語言定義。-
n注冊新語言使用者必須具有 PostgreSQL 超級使用者權。
CREATE LANGUAGE 將該語言的名字和一蚑掍峊y柄關聯起來,而該調用句柄-
t責執行該語言書寫的函數。 請參考 ``User-Defined Functions''
獲取有關語言調用句柄的更多信息。
請注意過程語言是對每蚇W立的數據庫而言是自己的。
n讓一種語言預設時可以為所有數據庫獲得,那你應該把它安裝到 template1
數據庫裏。
PARAMETERS數
TRUSTED
TRUSTED 說明對該語言的調用句柄是安全的;
也就是說,它不會提供給非特權使用者任何繞過訪問制的能力。
如果忽略這蚚鶬鉿r,只有具有 PostgreSQL 超級使用者權-
的人可以使用這蚖y言創建新的函數。
PROCEDURAL
這是茖S有用的字。
name 新的過程化語言的名稱。語言名是大小寫無關的。 這-
茼W字應該在數據庫的所有語言中唯一。
出於向下相容的鴞],這茼W字可以用單引號包圍。
HANDLER call_handler
call_handler 是一-
茈H前注冊過的函數的名字,該函數將被調用來執行這門過程語言寫的函數。
過程語言的調用句柄必須用一種編譯語言書寫,比如 C,調用-
榆璆眸楓O版本 1 的調用榆獢A 並且在 PostgreSQL
裏注冊為不接受參數並且返回 language_handler 類型的函數,
language_handler 是用於將函數聲明為調用句柄的佔位符。
VALIDATOR valfunction
valfunction 是一茪w經注冊的函數的名字,
在用該語言創建新函數的時-
埜N調用它來校驗新函數。如果沒有聲明校驗函數,那麼建立新函數的時-
埭N不會檢查它。 校驗函數必須接受一蚚型為 oid 的參數,它是將-
n創建的函數的 OID,並且通常會返回 void。
校驗函數通常會檢查函數體,看看看有沒有語法錯誤,但是它也可以查看函數的其它屬性,
比如該語言是否不能處理某種參數類型。n發出一蚇欞~,校驗函數應該用
elog() 函數。 該函數的返回N被忽略。
NOTES`N
這條命令通常不應該由使用者直接執行。 對於 PostgreSQL
版本裏提供的過程語言, 我抸雩茖洏 createlang(1) 程式, 它將為我-
怞w裝正確的調用句柄。 (createlang 也會在內部調用 CREATE LANGUAGE。)
在 PostgreSQL 版本 7.3 之前, 我怚眸溥n明句柄函數返回佔位類型
opaque,而不是 language_handler。 為了支持裝載舊的轉儲檔案,CREATE
LANGUAGE 還將接受聲明為返回 opaque 的函數,
但是它會發出一條通知並且把函數聲明返回類型改為 language_handler。
使用 CREATE FUNCTION [create_function(7)] 命令創建新函數。
使用 DROP LANGUAGE [drop_language(7)],或者更好是 droplang(1)
程式刪除一蚢L程語言。
系統表 pg_language (參閱 ``System Catalogs'')
記錄了更多有關當前安裝的過程語言的信息。createlang 也有一-
蚇龠策C出已安裝的語言。
目前,除了權之外,一種過程語言創建之後它的定義就不能再更改。
n使用一種過程語言,使用者必須被賦予 USAGE 權。
如果該語言已知是可信的,那麼 createlang 程式自動給每茪H賦予權。
EXAMPLESl
下惆漹禷陽鶡瑼漫R令將注冊一門新的過程語言及其關聯的調用句柄。
CREATE FUNCTION plsample_call_handler() RETURNS language_handler
AS '$libdir/plsample'
LANGUAGE C;
CREATE LANGUAGE plsample
HANDLER plsample_call_handler;
COMPATIBILITYe性
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>