CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE nome HANDLER tratador_de_chamadas [ VALIDATOR função_de_validação ]
Utilizando o comando CREATE LANGUAGE, um usuário do PostgreSQL pode registrar uma nova linguagem procedural em um banco de dados do PostgreSQL. Depois, podem ser definidas funções e procedimentos de gatilhos nesta nova linguagem. O usuário deve possuir o privilégio de superusuário do PostgreSQL para poder registrar uma nova linguagem.
O comando CREATE LANGUAGE associa o nome da linguagem ao tratador de chamadas (call handler) responsável pela execução das funções escritas nesta linguagem. Consulte a Seção 33.3 para obter mais informações sobre tratadores de chamada de linguagens.
Deve ser observado que as linguagens procedurais são locais a cada banco de dados. Para tornar, por padrão, uma linguagem disponível para todos os bancos de dados, esta deve ser instalada no banco de dados template1.
ereport()
. O valor retornado pela função é ignorado.
Normalmente, este comando não deve ser executado diretamente pelos usuários. Para as linguagens procedurais fornecidas na distribuição do PostgreSQL a aplicação createlang deve ser utilizada, porque esta aplicação também instala o tratador de chamadas correto; a aplicação createlang chama o comando CREATE LANGUAGE internamente.
Nas versões do PostgreSQL anteriores a 7.3, era necessário declarar as funções tratadoras como retornando o tipo opaque, em vez de language_handler. Para permitir a carga de cópias de segurança antigas, o comando CREATE LANGUAGE aceita as funções declaradas como retornando opaque, mas mostra uma mensagem e muda para language_handler o tipo retornado declarado pela função.
Use o comando CREATE FUNCTION para criar uma função.
Use o comando DROP LANGUAGE , ou melhor ainda, a aplicação droplang , para excluir linguagens procedurais.
O catálogo do sistema pg_language
(veja a
Seção 43.18
) registra informações sobre as linguagens instaladas correntemente. A aplicação createlang possui uma opção para listar as linguagens instaladas.
A definição de uma linguagem procedural não pode ser mudada após ter sido criada, com exceção dos privilégios.
Para poder utilizar uma linguagem procedural, deve ser concedido o privilégio USAGE para o usuário. O aplicativo createlang concede, automaticamente, permissão para todos se a linguagem for sabidamente trusted.
Os dois comandos mostrados abaixo, executados em seqüência, registram uma nova linguagem procedural e o tratador de chamadas associado:
CREATE FUNCTION plsample_call_handler() RETURNS language_handler AS '$libdir/plsample' LANGUAGE C; CREATE LANGUAGE plsample HANDLER plsample_call_handler;