8.13. Pseudotipos

O sistema de tipos do PostgreSQL contém uma série de entradas com finalidades especiais chamadas coletivamente de pseudotipos. Um pseudotipo não pode ser utilizado como o tipo de dado de uma coluna, mas pode ser utilizado para declarar os tipos dos argumentos e dos resultados das funções. Cada um dos pseudotipos disponíveis é útil em situações onde o comportamento da função não corresponde a simplesmente aceitar ou retornar o valor de um tipo de dado específico do SQL. A Tabela 8-20 lista os pseudotipos existentes.

Tabela 8-20. Pseudotipos

Nome Descrição
any Indica que a função recebe qualquer tipo de dado entrado.
anyarray Indica que a função recebe qualquer tipo de dado array (Consulte a Seção 31.2.5).
anyelement Indica que a função aceita qualquer tipo de dado (Consulte a Seção 31.2.5).
cstring Indica que a função recebe ou retorna cadeias de caracteres C terminadas por nulo.
internal Indica que a função recebe ou retorna tipos de dado internos do servidor.
language_handler Um tratador de chamada de linguagem procedural é declarado como retornando o tipo language_handler.
record Identifica uma função que retorna um tipo de linha não especificado.
trigger Uma função de gatilho é declarada como retornando o tipo trigger.
void Indica que a função não retorna valor.
opaque Um nome de tipo obsoleto usado no passado para todas as finalidades acima.

As funções codificadas em C (tanto nativas quanto carregadas dinamicamente) podem ser declaradas como recebendo ou retornando qualquer um destes pseudotipos de dado. É responsabilidade do autor da função garantir que a função se comporta com segurança quando é utilizado um pseudotipo como tipo do argumento.

As funções codificadas em linguagens procedurais podem utilizar somente os pseudotipos permitidos pela sua linguagem de implementação. Atualmente, todas as linguagens procedurais proíbem o uso de pseudotipos como tipo do argumento, permitindo apenas void e record como tipo do resultado (além de trigger, quando a função é utilizada como gatilho). Algumas linguagens também suportam funções polimórficas utilizando os tipos anyarray e anyelement.

O pseudotipo internal é utilizado para declarar funções feitas apenas para serem chamadas internamente pelo sistema de banco de dados, e não chamadas diretamente a partir de uma consulta SQL. Se a função possui ao menos um tipo de argumento internal então não pode ser chamada por um comando SQL. Para preservar a segurança de tipo desta restrição é importante seguir esta regra de codificação: não criar nenhuma função declarada como retornando o tipo internal, a não ser que haja pelo menos um argumento do tipo internal.

SourceForge.net Logo CSS válido!