一個程序語言必須“安裝”到每個要使用它的資料庫中。 但是在資料庫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 語言的處理器會被建立並安裝到 “library” 目錄;此外,PL/pgSQL 語言本身也會被安裝到所有資料庫。 如果設定了 Tcl 支援,PL/Tcl 和 PL/TclU 的處理器會被建立並安裝到 library 目錄中,但預設情況下,該語言本身不會被安裝到任何資料庫。 同樣地,如果設定了 Perl 支援,PL/Perl 和 PL/PerlU 的處理器會被建立並安裝,如果設定了 Python 支援,則會安裝 PL/PythonU 處理器,但這些語言預設皆不會被安裝。
如果您在文件中發現任何不正確、與您特定功能的使用經驗不符,或需要進一步澄清的資訊,請使用此表單回報文件問題。