Através do comando CREATE LANGUAGE, um usuário do PostgreSQL pode registrar uma nova linguagem procedural em um banco de dados do PostgreSQL. Depois, podem ser definidos 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 com o tratador de chamadas (call handler) que é responsável por executar as funções escritas nesta linguagem. Consulte o Guia do Programador para obter mais informações sobre os tratadores de chamadas das linguagens.
Observe que as linguagens procedurais são locais a cada bancos de dados. Para tornar uma linguagem disponível a todos os bancos de dados por padrão, esta linguagem deve ser instalada no banco de dados template1.
TRUSTED especifica que o tratador de chamadas para a linguagem é seguro, ou seja, não oferece a um usuário sem privilégios qualquer funcionalidade para contornar as restrições de acesso. Se esta palavra chave for omitida ao registrar a linguagem, somente usuários do PostgreSQL com privilégio de superusuário vão poder usar esta linguagem para criar novas funções.
Apenas informativo.
O nome da nova linguagem procedural. Não existe distinção entre letras minúsculas e maiúsculas. Uma linguagem procedural não pode substituir uma das linguagens nativas do PostgreSQL.
Por compatibilidade com as versões anteriores, o nome pode ser escrito entre apóstrofos (').
O tratador_de_chamadas é o nome de uma função, previamente registrada, que vai ser chamada para executar as funções escritas nesta linguagem procedural. O tratador de chamadas para a linguagem procedural deve ser escrito em uma linguagem compilada (como C), com a convenção de chamadas versão 1, registrada no PostgreSQL como uma função que não recebe nenhum argumento e com retorno do tipo opaque, que é um substituto para tipos não especificados ou não definidos.
Normalmente, este comando não deve ser executado diretamente pelos usuários. Para as linguagens procedurais fornecidas juntamente com a distribuição do PostgreSQL o aplicativo createlang deve ser utilizado, porque este aplicativo também instala o tratador de chamadas correto (O aplicativo createlang chama o CREATE LANGUAGE internamente).
Use o comando CREATE FUNCTION para criar uma nova função.
Use o comando DROP LANGUAGE, ou melhor ainda, o aplicativo droplang, para excluir linguagens procedurais.
O catálogo do sistema pg_language registra informações sobre as linguagens procedurais atualmente instaladas.
Table "pg_language" Attribute | Type | Modifier ---------------+---------+---------- lanname | name | lanispl | boolean | lanpltrusted | boolean | lanplcallfoid | oid | lancompiler | text | lanname | lanispl | lanpltrusted | lanplcallfoid | lancompiler -------------+---------+--------------+---------------+------------- internal | f | f | 0 | n/a C | f | f | 0 | /bin/cc sql | f | f | 0 | postgres
Atualmente, a definição de uma linguagem procedural não pode ser mudada após ter sido criada.
Os dois comandos mostrados abaixo, executados em seqüência, registram uma nova linguagem procedural e o tratador de chamadas associado:
CREATE FUNCTION minha_pl_trata_chamada () RETURNS opaque AS '$libdir/minha_pl' LANGUAGE C; CREATE LANGUAGE minha_pl HANDLER minha_pl_trata_chamada;
createlang, CREATE FUNCTION, droplang, DROP LANGUAGE, Guia do Programador do PostgreSQL