支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 7.3 / 7.2

40.1. 安裝程序語言 #

一個程序語言必須安裝到每個要使用它的資料庫中。 但是在資料庫template1中安裝的程序語言會自動在所有後續建立的資料庫中使用,因為它們在template1中的條目將被CREATE DATABASE複製。 因此,資料庫管理員可以決定哪些語言可以在哪些資料庫中使用,並且可以根據需要預設提供某些語言。

對於標準發行版提供的語言,只需執行 CREATE EXTENSION language_name 即可將該語言安裝到目前的資料庫中。 下面描述的手動過程僅建議用於安裝未封裝為擴充功能的語言。

手動安裝程序語言

程序語言以五個步驟安裝到資料庫中,這些步驟必須由資料庫超級使用者執行。 在大多數情況下,所需的 SQL 命令應封裝為擴充功能的安裝指令碼,以便可以使用CREATE EXTENSION來執行它們。

  1. 語言處理器的共享物件必須被編譯並安裝到適當的程式庫目錄中。 這與使用常規使用者定義的 C 函數構建和安裝模組的方式相同;請參閱第 36.10.5 節。 通常,語言處理器將依賴於提供實際程式語言引擎的外部程式庫;如果是這樣,也必須安裝該程式庫。

  2. 必須使用以下命令宣告處理器:

    CREATE FUNCTION handler_function_name()
        RETURNS language_handler
        AS 'path-to-shared-object'
        LANGUAGE C;
    

    language_handler的特殊回傳類型告訴資料庫系統,此函數不會回傳定義的SQL資料類型,並且不能直接在SQL語句中使用。

  3. 或者,語言處理器可以提供一個內聯處理函數,該函數執行使用此語言編寫的匿名程式碼區塊(DO 命令)。 如果語言提供了內聯處理函數,則使用類似以下的命令宣告它:

    CREATE FUNCTION inline_function_name(internal)
        RETURNS void
        AS 'path-to-shared-object'
        LANGUAGE C;
    
  4. 或者,語言處理器可以提供一個驗證器函數,該函數檢查函數定義的正確性,而無需實際執行它。 如果存在驗證器函數,則CREATE FUNCTION會呼叫它。 如果語言提供了驗證器函數,則使用類似以下的命令宣告它:

    CREATE FUNCTION validator_function_name(oid)
        RETURNS void
        AS 'path-to-shared-object'
        LANGUAGE C STRICT;
    
  5. 最後,必須使用以下命令宣告 PL:

    CREATE [TRUSTED] LANGUAGE language_name
        HANDLER handler_function_name
        [INLINE inline_function_name]
        [VALIDATOR validator_function_name] ;
    

    可選的關鍵字TRUSTED指定該語言不授予對使用者原本無法存取的資料的存取權限。 受信任的語言是為普通資料庫使用者(那些沒有超級使用者權限的使用者)設計的,並允許他們安全地建立函數和程序。 由於 PL 函數在資料庫伺服器內部執行,因此TRUSTED標誌僅應給予那些不允許存取資料庫伺服器內部或檔案系統的語言。PL/pgSQLPL/TclPL/Perl 被認為是受信任的;語言 PL/TclUPL/PerlUPL/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/TclPL/TclU 的處理器會被建立並安裝到 library 目錄中,但預設情況下,該語言本身不會被安裝到任何資料庫。 同樣地,如果設定了 Perl 支援,PL/PerlPL/PerlU 的處理器會被建立並安裝,如果設定了 Python 支援,則會安裝 PL/PythonU 處理器,但這些語言預設皆不會被安裝。

提交更正

如果您在文件中發現任何不正確、與您特定功能的使用經驗不符,或需要進一步澄清的資訊,請使用此表單回報文件問題。