| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
PL/Tcl 是一種用于 PostgreSQL 數據庫系統的可裝載的過程化語言, 它讓我們可以用 Tcl 語言來書寫函數和觸發器過程。
PL/Tcl 提供 C 語言裡面函數開發者所擁有的大多數功能,只有一點點限制除外。
好的限制是,所有東西都是在一個安全的 Tcl 解釋器裡面運行的。 除了安全的 Tcl 一個有限的命令集外,只有很少的幾個命令可以通過 SPI 訪問數據庫以及通過elog()生成錯誤信息。不象 C 函數那樣, (Tcl)沒有辦法訪問數據庫後端內部或者獲得 OS 級的 PostgreSQL 服務器進程的權限。 因此,任何非特權的數據庫用戶都可以被允許使用這種語言。
另外的實現級限制是 Tcl 過程不能用于創建新數據庫類型的輸入/輸出函數。
有時候我們需要寫一些不受安全 Tcl 限制的 Tcl 函數,比如, 我們可能需要一個可以發送郵件的 Tcl 函數。要處理這樣的問題, 我們有一個PL/Tcl的變種,叫PL/TclU(意思是不可信的 Tcl)。 這個語言和 PL/Tcl 是完全一樣的,只不過使用了一個完整的 Tcl 解釋器。 如果你使用了PL/TclU,那麼你必須把它安裝成一種不可信的過程語言, 這樣只有數據庫超級用戶可以用它創建函數。 PL/TclU函數的作者必須注意:你寫的函數一定不要做任何預算外的事情, 因為它能幹所有登錄為數據庫管理員的用戶能幹的事情。
如果在安裝過程的配置步驟中聲明了 Tcl/TK 支持, 那麼 PL/TCL和PL/TclU 的調用句柄是在制作時自動制作並安裝到 PostgreSQL 庫目錄中去的。 要在某個特定的數據庫中安裝 PL/Tcl 和/或 PL/TclU,那麼你可以使用 createlang 程序。 比如 createlang pltcl dbname 或 createlang pltclu dbname。