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 de registrada, poderão ser definidas funções e procedimentos de gatilho 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. Para obter informações adicionais sobre tratadores de chamada de linguagens deve ser consultada a Seção 31.3.
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.
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 transpor as restrições de acesso. Se esta palavra chave for omitida ao registrar a linguagem, somente os 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 no nome da linguagem. O nome deve ser único entre todas as linguagens do banco de dados.
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 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 a linguagem C, com a convenção de chamadas versão 1, registrada no PostgreSQL como uma função que não recebe nenhum argumento e retorna o tipo language_handler, que é um tipo guardador de lugar usado apenas para identificar a função como tratadora de chamadas.
A função_de_validação é o nome da função, registrada previamente, a ser chamada quando for criada uma nova função nesta linguagem para validar esta nova função. Se não for especificada nenhuma função validadora, então a nova função não será verificada ao ser criada. A função validadora deve receber um argumento do tipo oid, que será o OID (identificador do objeto) da função a ser criada, e normalmente retorna void.
Tipicamente a função validadora inspeciona o corpo da função para verificar se a sintaxe está correta, mas também pode verificar outras propriedades da função como, por exemplo, certos tipos de dado para argumentos que a linguagem não pode tratar. Para sinalizar erro a função validadora deve usar a função 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 deve ser utilizado o aplicativo createlang, porque este aplicativo também instala o tratador de chamadas correto; o aplicativo 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 guardador de lugar opaque, em vez de language_handler. Para permitir a carga de cópias de segurança antigas (dump), o comando CREATE LANGUAGE aceita funções declaradas como retornando opaque, mas mostra uma mensagem e muda o tipo de dado retornado declarado pela função para language_handler.
Use o comando CREATE FUNCTION para criar uma função.
Para remover uma linguagem procedural deve ser utilizado o comando DROP LANGUAGE, ou melhor ainda, o aplicativo droplang.
O catálogo do sistema pg_language (consulte a Seção 42.18) registra informações sobre as linguagens instaladas neste momento. O aplicativo createlang possui uma opção para listar as linguagens instaladas (mas só mostra as linguagens procedurais — N. do T.).
Para criar funções em uma linguagem procedural, o usuário deve possuir o privilégio USAGE para a linguagem. O aplicativo createlang concede, automaticamente, permissão para todos se a linguagem for trusted.