過程語言必須被“安裝”到每個要使用該語言的資料庫中。但是,安裝在 template1
資料庫中的過程語言在所有後續建立的資料庫中都是自動可用的,因為它們在 template1
中的條目會被 CREATE DATABASE
命令複製。因此,資料庫管理員可以決定在哪些資料庫中可用哪些語言,並可以在需要時使某些語言預設可用。
對於標準發行版中提供的語言,只需執行 CREATE EXTENSION
language_name
即可將語言安裝到當前資料庫。下面描述的手動過程僅推薦用於安裝尚未打包為擴充套件的語言。
手動安裝過程語言
過程語言的安裝在一個數據庫中有五個步驟,必須由資料庫超級使用者執行。在大多數情況下,所需的 SQL 命令應該打包成一個“擴充套件”的安裝指令碼,以便可以使用 CREATE EXTENSION
來執行它們。
語言處理器的共享物件必須被編譯並安裝到一個合適的庫目錄中。這與構建和安裝普通使用者定義 C 函式的模組的方式相同;參見 第 36.10.5 節。通常,語言處理器會依賴一個提供實際程式語言引擎的外部庫;如果是這樣,該庫也必須被安裝。
必須使用以下命令宣告處理器
CREATE FUNCTIONhandler_function_name
() RETURNS language_handler AS 'path-to-shared-object
' LANGUAGE C;
特殊的返回型別 language_handler
告訴資料庫系統該函式不返回已定義的SQL資料型別,並且不能直接用於SQL語句。
可選地,語言處理器可以提供一個“內聯”處理器函式,該函式用於執行用該語言編寫的匿名程式碼塊(DO
命令)。如果語言提供了內聯處理器函式,請使用類似以下命令的命令宣告它:
CREATE FUNCTIONinline_function_name
(internal) RETURNS void AS 'path-to-shared-object
' LANGUAGE C;
可選地,語言處理器可以提供一個“驗證器”函式,該函式可以在不實際執行函式定義的情況下檢查其正確性。如果存在驗證器函式,CREATE FUNCTION
將呼叫該函式。如果語言提供了驗證器函式,請使用類似以下命令的命令宣告它:
CREATE FUNCTIONvalidator_function_name
(oid) RETURNS void AS 'path-to-shared-object
' LANGUAGE C STRICT;
最後,必須使用以下命令宣告 PL:
CREATE [TRUSTED] LANGUAGElanguage_name
HANDLERhandler_function_name
[INLINEinline_function_name
] [VALIDATORvalidator_function_name
] ;
可選關鍵字 TRUSTED
指定該語言不授予使用者本來無法訪問的資料。受信任的語言是為普通資料庫使用者(沒有超級使用者許可權的使用者)設計的,並允許他們安全地建立函式和過程。由於 PL 函式在資料庫伺服器內部執行,因此 TRUSTED
標誌只能用於不允許訪問資料庫伺服器內部或檔案系統的語言。PL/pgSQL、PL/Tcl 和 PL/Perl 被認為是受信任的;PL/TclU、PL/PerlU 和 PL/PythonU 的設計目的是提供無限功能,並且 不 應該被標記為受信任。
示例 40.1 展示了手動安裝過程如何與 PL/Perl 語言配合使用。
示例 40.1. 手動安裝 PL/Perl
以下命令告訴資料庫伺服器在哪裡可以找到 PL/Perl 語言呼叫處理器函式的共享物件
CREATE FUNCTION plperl_call_handler() RETURNS language_handler AS '$libdir/plperl' LANGUAGE C;
PL/Perl 有一個內聯處理器函式和一個驗證器函式,所以我們也宣告它們
CREATE FUNCTION plperl_inline_handler(internal) RETURNS void AS '$libdir/plperl' LANGUAGE C STRICT; CREATE FUNCTION plperl_validator(oid) RETURNS void AS '$libdir/plperl' LANGUAGE C STRICT;
命令
CREATE TRUSTED LANGUAGE plperl HANDLER plperl_call_handler INLINE plperl_inline_handler VALIDATOR plperl_validator;
然後定義,在語言屬性為 plperl
的函式和過程中呼叫先前宣告的函式。
在預設的 PostgreSQL 安裝中,PL/pgSQL 語言的處理器被編譯並安裝到“庫”目錄中;此外,PL/pgSQL 語言本身就安裝在所有資料庫中。如果配置了 Tcl 支援,PL/Tcl 和 PL/TclU 的處理器會被編譯並安裝到庫目錄中,但該語言本身預設不會安裝到任何資料庫中。同樣,如果配置了 Perl 支援,PL/Perl 和 PL/PerlU 的處理器會被編譯並安裝,如果配置了 Python 支援,PL/PythonU 的處理器會被安裝,但這些語言預設不會被安裝。
如果您在文件中發現任何不正確之處、與您對特定功能的體驗不符之處或需要進一步澄清之處,請使用 此表單 報告文件問題。