42.1. Introducción #

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.