CREATE LANGUAGE

Name

CREATE LANGUAGE -- define uma nova linguagem procedural

Synopsis

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE nome_da_linguagem
    HANDLER tratador_de_chamadas

Descrição

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.

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 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.

PROCEDURAL

Apenas informativo.

nome_da_linguagem

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

HANDLER tratador_de_chamadas

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.

Diagnósticos

CREATE
Mensagem retornada se a linguagem for criada com sucesso.
ERROR:  PL handler function nome_da_função() doesn't exist
Este erro ocorre quando a função nome_da_função() não for encontrada.

Notas

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.

Exemplos

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;

Compatibilidade

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

Histórico

O comando CREATE LANGUAGE apareceu pela primeira vez no PostgreSQL 6.3.

Consulte também

createlang, CREATE FUNCTION, droplang, DROP LANGUAGE, Guia do Programador do PostgreSQL