42.1. Visão geral #

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.