PL/Tcl 提供了函數撰寫者在使用 C 語言時所擁有的大部分功能,僅有一些限制,並增加了 Tcl 可用的強大字串處理函式庫。
一個令人信服的 良好 限制是,所有內容都在 Tcl 直譯器的安全環境中執行。除了安全 Tcl 的有限指令集之外,只有少數指令可透過 SPI 存取資料庫,並透過 elog()
引發訊息。 PL/Tcl 沒有提供存取資料庫伺服器內部結構或在 PostgreSQL 伺服器程序權限下取得作業系統層級存取權限的方法,而 C 函數可以做到。 因此,可以信任沒有權限的資料庫使用者使用此語言;它不會賦予他們無限的權力。
另一個值得注意的實作限制是,Tcl 函數不能用於為新的資料類型建立輸入/輸出函數。
有時,希望編寫不限於安全 Tcl 的 Tcl 函數。 例如,可能需要一個發送電子郵件的 Tcl 函數。 為了處理這些情況,PL/Tcl 有一個變體,稱為 PL/TclU
(表示不信任的 Tcl)。 這是一個完全相同的語言,除了使用完整的 Tcl 直譯器。如果使用 PL/TclU,則必須將其安裝為不信任的程序語言,以便只有資料庫超級使用者才能在其中建立函數。 PL/TclU 函數的編寫者必須注意,該函數不能用於執行任何不需要的操作,因為它將能夠執行以資料庫管理員身分登入的使用者可以執行的任何操作。
如果在安裝程序的配置步驟中指定了 Tcl 支援,則 PL/Tcl 和 PL/TclU 呼叫處理常式的共用物件程式碼會自動建立並安裝在 PostgreSQL 函式庫目錄中。 若要在特定資料庫中安裝 PL/Tcl 和/或 PL/TclU,請使用 CREATE EXTENSION
指令,例如 CREATE EXTENSION pltcl
或 CREATE EXTENSION pltclu
。
如果您在文件中發現任何不正確、與您特定功能體驗不符或需要進一步澄清的地方,請使用此表單來回報文件問題。