CREATE LANGUAGE

Nome

CREATE LANGUAGE -- cria uma linguagem procedural

Sinopse

CREATE [ PROCEDURAL ] LANGUAGE nome
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE nome
    HANDLER tratador_de_chamadas [ VALIDATOR função_de_validação ]

Descriçã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 33.3.

Existem duas formas do comando CREATE LANGUAGE. Na primeira forma o usuário fornece apenas o nome da linguagem desejada, e o servidor PostgreSQL consulta o catálogo do sistema pg_pltemplate para determinar os parâmetros corretos. Na segunda forma o usuário fornece os parâmetros da linguagem junto com o nome da linguagem. A segunda forma pode ser utilizada para criar linguagens que não estão definidas em pg_pltemplate, mas esta abordagem é considerada em obsolescência.

Quando o servidor encontra uma entrada para a linguagem especificada no catálogo pg_pltemplate são utilizados os dados do catálogo, mesmo que o comando inclua parâmetros para a linguagem. Este comportamento simplifica a carga de arquivos de cópia de segurança (dump) antigos, os quais provavelmente contêm informações sobre funções de suporte de linguagem desatualizadas.

Parâmetros

TRUSTED

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.

PROCEDURAL

Apenas informativo.

nome

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 (').

HANDLER tratador_de_chamadas

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.

VALIDATOR função_de_validação

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.

A opção TRUSTED, e os nomes das funções de suporte, são ignorados quando o servidor possui uma entrada para o nome especificado para a linguagem no catálogo do sistema pg_pltemplate.

Observações

O aplicativo createlang é um programa escrito em C que chama internamente o comando CREATE LANGUAGE, e facilita a instalação de linguagens procedurais a partir da linha de comando do interpretador de comandos.

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 43.20) registra informações sobre as linguagens instaladas neste momento. O aplicativo createlang também 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. Por padrão, é concedido o privilégio USAGE para PUBLIC (ou seja, todos) para as linguagens confiáveis. Se for desejado, o privilégio poderá ser revogado.

As linguagens procedurais são locais para cada banco de dados. Entretanto, a linguagem pode ser instalada no banco de dados template1 fazendo com que fique disponível, automaticamente, para todos os bancos de dados criados a seguir.

A função tratadora de chamadas e a função validadora (se houver) já deverão existir se o servidor não possuir uma entrada para a linguagem no catálogo do sistema pg_pltemplate. Porém, quando existe uma entrada no catálogo as funções não precisam estar presentes; serão definidas automaticamente se não estiverem presentes no banco de dados (Isto pode fazer com que o comando CREATE LANGUAGE falhe, caso a biblioteca compartilhada que implementa a linguagem não esteja disponível na instalação).

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.

Exemplos

A forma preferida para criar qualquer uma das linguagens procedurais padrão é apenas:

CREATE LANGUAGE plpgsql;

Para uma linguagem não presente no catálogo do sistema pg_pltemplate é necessária uma seqüência como esta:

CREATE FUNCTION plsample_call_handler() RETURNS language_handler
    AS '$libdir/plsample'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;

Compatibilidade

O comando CREATE LANGUAGE é uma extensão do PostgreSQL.

Consulte também

ALTER LANGUAGE, CREATE FUNCTION, DROP LANGUAGE, GRANT, REVOKE, createlang, droplang
SourceForge.net Logo CSS válido!