5.11. 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 tipos de argumentos e de resultados de funções. Cada um dos pseudotipos disponíveis é útil em situações nas quais 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 5-21 relaciona os pseudotipos existentes.

Tabela 5-21. Pseudotipos

Nome do tipoDescrição
recordIdentifica uma função que retorna um tipo de linha não especificado
anyIndica que a função recebe qualquer tipo de dado entrado
anyarrayIndica que a função recebe qualquer tipo de dado array
voidIndica que a função não retorna valor
triggerUma função de gatilho é declarada como retornando o tipo trigger
language_handlerUm tratador de chamada de linguagem procedural é declarado como retornando o tipo language_handler
cstringIndica que a função recebe ou retorna uma cadeia de caracteres C terminada por nulo
internalIndica que a função recebe ou retorna um tipo de dado interno do servidor
opaqueUm nome de tipo obsoleto usado anteriormente 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. É responsabilidade do autor da função garantir que a função se comporta com segurança quando um pseudotipo é utilizado como tipo de 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 utilizar pseudotipos como tipo do argumento, permitindo apenas void como tipo do resultado (além de trigger, quando a função é utilizada como gatilho).

O pseudotipo internal é utilizado para declarar funções feitas apenas para serem chamadas internamente pelo sistema de banco de dados, e não chamadas 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.