Chapter 36. PL/Tcl - Tcl 過程語言

Table of Contents
36.1. 概述
36.2. PL/Tcl 函數和參數
36.3. PL/Tcl 裡的資料值
36.4. PL/Tcl 裡的全局量
36.5. 在 PL/Tcl 裡面存取資料庫
36.6. PL/Tcl 裡的觸發器過程
36.7. 模塊和unknown(未知)的命令
36.8. Tcl 過程名字

PL/Tcl 是一種用於 PostgreSQL 資料庫系統的可裝載的過程化語言, 它讓我們可以用 Tcl 語言來書寫函數和觸發器過程。

36.1. 概述

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 支援, 那麼 PL/TCLPL/TclU 的調用句柄是在製作時自動製作並安裝到 PostgreSQL 庫目錄中去的。 要在某個特定的資料庫中安裝 PL/Tcl 和/或 PL/TclU,那麼您可以使用 createlang 程序。 比如 createlang pltcl dbnamecreatelang pltclu dbname