O PL/Tcl oferece a maioria das funcionalidades que um programador de funções possui na linguagem C, com algumas restrições, e com a adição das poderosas bibliotecas de processamento de cadeias de caracteres disponíveis no Tcl.
Uma restrição boa e convincente é que tudo é
executado dentro da segurança do contexto de um interpretador
Tcl.
Além do conjunto limitado de comandos seguros do Tcl,
apenas alguns comandos estão disponíveis para acessar o banco de
dados via SPI e para gerar mensagens via
elog().
O PL/Tcl não oferece nenhuma maneira de acessar
os detalhes internos do servidor de banco de dados ou para obter
acesso no nível de sistema operacional com as permissões do processo
servidor PostgreSQL, como uma função
escrita em C pode fazer.
Portanto, pode-se permitir que usuários sem privilégios de administrador
utilizem esta linguagem; ela não lhes confere autoridade ilimitada.
Outra restrição de implementação que se deve notar é que as funções Tcl não podem ser usadas para criar funções de entrada/saída para novos tipos de dados.
Às vezes, se deseja escrever funções Tcl que não estejam restritas ao Tcl seguro. Por exemplo, pode-se querer uma função Tcl que envie e-mails. Para lidar com estes casos, existe uma variante do PL/Tcl chamada PL/TclU (para Tcl não confiável). Trata-se exatamente da mesma linguagem, exceto pelo uso de um interpretador Tcl completo. Se for usado o PL/TclU, este deverá ser instalado como uma linguagem procedural não confiável, para que apenas os superusuários do banco de dados possam criar funções nele. O autor de uma função PL/TclU deve garantir que a função não possa ser usada para fazer nada indesejável, porque ela poderá fazer tudo o que um usuário conectado como administrador do banco de dados poderia fazer.
O código objeto compartilhado para os tratadores de chamadas
PL/Tcl e PL/TclU
será compilado e instalado automaticamente no diretório de biblioteca
do PostgreSQL, se o suporte a
Tcl for especificado na etapa de configuração
do procedimento de instalação.
Para instalar o PL/Tcl e/ou o
PL/TclU em um determinado banco de dados
deve ser usado o comando CREATE EXTENSION como,
por exemplo, CREATE EXTENSION pltcl ou
CREATE EXTENSION pltclu.