PL/Tcl ofrece la mayoría de las capacidades que un escritor de funciones tiene en el lenguaje C, con unas pocas restricciones y con la adición de las potentes bibliotecas de procesamiento de cadenas disponibles para Tcl.
Una restricción especialmente buena es que
todo se ejecuta dentro de la seguridad del contexto de un
intérprete de Tcl. Además del conjunto limitado de comandos de Tcl seguro,
solo unos pocos comandos están disponibles para acceder a la base de datos a través de
SPI y para emitir mensajes a través de elog(). PL/Tcl
no proporciona ninguna forma de acceder a las partes internas del servidor de la base de datos o de
obtener acceso a nivel de sistema operativo bajo los permisos del proceso del servidor
PostgreSQL, como puede hacer una función en C.
Por lo tanto, se puede confiar en que los usuarios no privilegiados de la base de datos
utilicen este lenguaje; no les otorga autoridad ilimitada.
La otra restricción de implementación notable es que las funciones de Tcl no se pueden utilizar para crear funciones de entrada/salida para nuevos tipos de datos.
A veces es deseable escribir funciones Tcl que no estén restringidas
a un Tcl seguro. Por ejemplo, se podría querer una función Tcl que envíe
un correo electrónico. Para manejar estos casos, existe una variante de PL/Tcl llamada PL/TclU
(para Tcl no confiable). Es exactamente el mismo lenguaje, excepto que se utiliza un intérprete de
Tcl completo. Si se utiliza PL/TclU, debe
instalarse como un lenguaje procedimental no confiable de modo que solo
los superusuarios de la base de datos puedan crear funciones en él. El escritor de una función
PL/TclU debe tener cuidado de que la función no se pueda utilizar para hacer nada
no deseado, ya que podrá hacer cualquier cosa que pueda hacer un
usuario que haya iniciado sesión como administrador de la base de datos.
El código de objeto compartido para los manejadores de llamadas de PL/Tcl y
PL/TclU se compila e instala automáticamente
en el directorio de bibliotecas de PostgreSQL
si se especifica el soporte de Tcl en el paso de configuración del
procedimiento de instalación. Para instalar PL/Tcl
y/o PL/TclU en una base de datos particular, utiliza el
comando CREATE EXTENSION, por ejemplo
CREATE EXTENSION pltcl o
CREATE EXTENSION pltclu.