[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 數據庫 > 其它 > 正文
PostgreSQL7.0手冊-程序員手冊 -49. 過程語言
編譯:何偉平 laser@zhengmai.com.cn (2001-04-21 23:10:57)
第四十九章. 過程語言
Postgres 就支持過程語言的定義.當碰到函數或觸發器過程是用過程語言定義的時候,數據庫內部並不知道如何解釋這些函數源代碼文本.取而代之的是,調用將被傳遞到一個認知該語言詳情的控制器中去.該控制器本身是一個編譯成共享對象的特殊的編程語言函數,在需要的時候被調用. 
為一種新的過程語言(PL)書寫一個控制器的論題超出本手冊范圍. 

安裝過程語言
過程語言的安裝 
一個過程語言是按三個步驟安裝到數據庫裡面去的.(對隨標準版本提供的過程語言,可以用 shell 腳本 createlang 代替手工操作.) 

該語言的控制器的共享對象(目標)必須被編譯和安裝.缺省時用 PL/pgSQL 的控制器將被制作和安裝到數據庫的庫目錄.如果 配置了 Tcl/TK 的支持,用 PL/Tcl 的控制器同樣被制作和安裝到相同的目錄中去. 
控制器必須用下面命令聲明 

CREATE FUNCTION handler_function_name ()
    RETURNS OPAQUE AS
    'path-to-shared-object' LANGUAGE 'C';
特殊的返回類型 OPAQUE 告訴數據庫,這個函數並不返回一個基本的或復合的數據類型並且是不能直接在SQL 語句裡面使用. 
PL 必須用下面命令定義 

CREATE [ TRUSTED ] PROCEDURAL LANGUAGE 'language-name'
    HANDLER handler_function_name
    LANCOMPILER 'description';
可選的關鍵字 TRUSTED 指明一個沒有超級用戶權限的普通數據庫用戶能否使用這種語言創建函數和觸發器過程.因為 PL 函數在數據庫端內部執行,所以它應該只是用那些不獲得訪問數據庫端內部或文件系統權限的語言.語言 PL/pgSQL 和 PL/Tcl 都被認為是可信的.
樣例 
下面的命令告訴數據庫到那裡才能找到用 PL/pgSQL 語言的調用控制器函數的共享對象(目標). 
CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS
    '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C';
下面的命令 
CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
    HANDLER plpgsql_call_handler
    LANCOMPILER 'PL/pgSQL';
定義了前面所定義的調用控制器函數,應該是在調用語言屬性是 'plpgsql'的函數或觸發器過程被調用的時候使用. 
(譯注:pl/tcl也要用上面的兩個命令來生效,缺省時兩種過程語言都沒有生效,都需要安裝.要注意的是pl/tcl過程語言的安裝需要系統中裝有共享庫的Tcl腳本語言,如沒有需要先行安裝,注意一定要編譯成共享庫,然可以到.../postgresql/src/pl/tcl目錄下重新編譯,生成pltcl.so再用上面方法安裝,在我的Slackware4.0機器上,需要修改Makefile.tcldefs文件的TCL_SHARED_BUILD定義使其=1方可編譯成功.安裝時別忘了把上面兩條命令的'PL/PgSQL'改成'PL/TCL',plpgsql.so改成pltcl.so.請大家安裝時注意.或者可以在配置的時候在 configure 裡加入 --witch-tclconfig=/some_place.) 

PL 控制器函數有一個特殊的調用接口,該接口與通常的 C 語言函數不同.傳遞給控制器的一個參數是將要被執行的函數在 pg_proc 裡的對象標識(OID).控制器檢查各種各樣的系統表,分析函數調用參數和它的返回數據的類型.函數體的源碼文本放在 pg_proc 裡 prosrc 字段.因此與 C 語言函數對比,PL 函數可以象 SQL 語言函數那樣重載.可以有多個不同的 PL 函數擁有同樣的函數名,只要調用參數是不一樣的即可. 

在 template1 數據庫裡定義的過程語言自動在隨創建的數據庫裡面定義.所以數據庫管理員可以決定那種語言缺省時可用.


--------------------------------------------------------------------------------
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
PostgreSQL7.0手冊-附錄-文檔 (2001-04-21 23:50:44)
PostgreSQL7.0手冊-附錄-日期/時間支持-CVS 倉庫 (2001-04-21 23:48:48)
PostgreSQL7.0手冊-教程 -73. Postgres SQL 高級特性 (2001-04-21 23:45:36)
PostgreSQL7.0手冊-教程 -72. 查詢語言 (2001-04-21 23:44:40)
PostgreSQL7.0手冊-教程 -71. 開始 (2001-04-21 23:42:54)
PostgreSQL7.0手冊-教程 -70. 體系結構 (2001-04-21 23:41:58)
PostgreSQL7.0手冊-教程 -69. SQL (2001-04-21 23:41:23)
PostgreSQL7.0手冊-開發者手冊 -68. 分頁文件 (2001-04-21 23:39:22)
PostgreSQL7.0手冊-開發者手冊 -67. 端接口 (2001-04-21 23:38:34)
PostgreSQL7.0手冊-開發者手冊 -66. gcc 缺省優化 (2001-04-21 23:37:20)

===更多相關===
 

★  樊強制作 歡迎分享  ★