<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 39.1\. 安裝過程語言 如果你要使用某種過程語言,那么你必須把它"安裝"到要使用它的數據庫里。 不過那些安裝到數據庫`template1`里的過程語言會自動在隨后創建的數據庫中安裝。 因為`template1`中的目錄通過`CREATE DATABASE`進行拷貝, 因此數據庫管理員可以決定哪個數據庫可以使用哪種語言, 以及決定缺省時可以使用哪些語言。 對于那些隨著標準版本發布的語言, 只需要使用`CREATE EXTENSION` `_language_name_`把語言安裝到當前數據庫中即可。 另外,也可以使用[createlang](#calibre_link-47)程序在shell命令行上安裝語言。 比如,要將PL/Perl安裝到`template1`數據庫中,可以使用: ``` createlang plperl template1 ``` 推薦下面描述的手工程序來安裝沒有作為擴展包裝的定制語言。 **手工安裝過程語言** 一個過程語言是按五個步驟安裝到數據庫里面去的, 這些任務必須由數據庫超級用戶執行。 在大多數情況下所需的SQL命令應該被打包成"擴展"的安裝腳本, 因此`CREATE EXTENSION`可以用于執行它們。 1. 必須編譯和安裝該語言處理器的共享對象并安裝到一個合適的庫目錄中。 方法和安裝用戶定義的 C 函數的方法([Section 35.9.6](#calibre_link-926))一樣。通常, 語言處理器需要外部庫提供實際的引擎;如果是這樣, 那么這些庫也必須安裝。 2. 處理器必須使用下面的命令聲明 ``` CREATE FUNCTION _handler_function_name_() RETURNS language_handler AS '_path-to-shared-object_' LANGUAGE C; ``` `language_handler`的返回類型告訴數據庫系統該函數并不返回任何已定義的SQL數據類型, 并且不能在SQL語句中被直接使用。 3. 可選步驟,語言處理器可以提供一個"內置"函數, 這個函數執行使用這種語言編寫的匿名代碼塊([DO](#calibre_link-521)命令)。 如果通過該語言提供一個內置處理函數,那么用下面的命令聲明: ``` 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] [PROCEDURAL] LANGUAGE _language-name_ HANDLER _handler_function_name_ [INLINE `_inline_function_name_`] [VALIDATOR `_validator_function_name_`] ; ``` 可選關鍵字`TRUSTED`指明該語言不授予訪問用戶不擁有的數據的權限, 為一個沒有超級用戶權限的普通數據庫用戶設計可信任語言, 并且允許他們安全地使用這種語言創建函數和觸發器過程。 因為 PL 函數在數據庫服務器中執行, 所以`TRUSTED`標志應該只是用于那些不允許訪問數據庫服務器內部或文件系統的語言。 PL/pgSQL, PL/Tcl和 PL/Perl語言都是可信的。PL/TclU, PL/PerlU和 PL/PythonU 都被設計成提供無限的功能,因此_不應該_標記為可信。 [Example 39-1](#calibre_link-2248)顯示了如何手工安裝PL/Perl語言。 **Example 39-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; CREATE FUNCTION plperl_validator(oid) RETURNS void AS '$libdir/plperl' LANGUAGE C STRICT; ``` 命令: ``` CREATE TRUSTED PROCEDURAL 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 的處理器也都被編譯并安裝到同一個庫目錄中。 但是語言自身缺省不安裝到任何數據庫中,類似的, 如果配置了Perl支持,則PL/Perl和PL/PerlU的處理器也都編譯并且安裝。 并且如果配置了Python支持,則安裝PL/PythonU處理器。 但是這些語言缺省不安裝。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看