41.1. Обзор#
41.1. Обзор #
PL/Tcl предлагает большую часть возможностей, которые есть у автора функций на языке C, с некоторыми ограничениями, а также с добавлением мощных библиотек обработки строк, доступных для Tcl.
Одно убедительное преимущество состоит в том, что все выполняется в безопасной среде интерпретатора Tcl. Кроме ограниченного набора команд безопасного Tcl, доступны только несколько команд для доступа к базе данных через SPI и для вывода сообщений через elog()
. PL/Tcl не предоставляет способа доступа к внутреннему устройству сервера базы данных или получения доступа к уровню ОС с правами процесса сервера Tantor BE, как это может делать функция на языке C. Таким образом, можно доверять непривилегированным пользователям базы данных при использовании этого языка; он не дает им неограниченных полномочий.
Ограничение другой реализации заключается в том, что нельзя использовать функции Tcl для создания функций ввода/вывода для новых типов данных.
Иногда требуется написать функции Tcl, которые не ограничены безопасным Tcl. Например, может понадобиться функция Tcl, которая отправляет электронную почту. Для обработки таких случаев существует вариант PL/Tcl под названием PL/TclU
(для ненадежного Tcl). Это точно такой же язык, за исключением того, что используется полный интерпретатор Tcl. Если используется PL/TclU, он должен быть установлен как ненадежный процедурный язык, чтобы только суперпользователи базы данных могли создавать функции в нем. Автор функции PL/TclU должен позаботиться о том, чтобы функция не могла быть использована для выполнения нежелательных действий, так как она сможет делать все то, что может делать пользователь, вошедший в систему как администратор базы данных.
Общий код объектов для обработчиков вызовов PL/Tcl и
PL/TclU автоматически собирается и устанавливается в библиотечном каталоге Tantor BE, если поддержка Tcl указана на этапе конфигурации процедуры установки. Чтобы установить PL/Tcl
и/или PL/TclU в определенной базе данных, используйте команду CREATE EXTENSION
, например CREATE EXTENSION pltcl
или CREATE EXTENSION pltclu
.