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.