Обзор
Эта страница переведена при помощи нейросети GigaChat.
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 должен позаботиться о том, чтобы функция не могла быть использована для выполнения нежелательных действий, поскольку она сможет делать все, что мог бы сделать пользователь, вошедший в систему в качестве администратора базы данных.
Код общего объекта для обработчиков вызовов PL/Tcl и PL/TclU автоматически собирается и устанавливается в каталоге библиотеки PostgreSQL, если поддержка Tcl указана на этапе конфигурации процедуры установки. Для установки PL/Tcl и/или PL/TclU в конкретной базе данных используйте команду CREATE EXTENSION
, например CREATE EXTENSION pltcl
или CREATE EXTENSION pltclu
.