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 tipo | Descrição |
---|---|
record | Identifica uma função que retorna um tipo de linha não especificado |
any | Indica que a função recebe qualquer tipo de dado entrado |
anyarray | Indica que a função recebe qualquer tipo de dado array |
void | Indica que a função não retorna valor |
trigger | Uma função de gatilho é declarada como retornando o tipo trigger |
language_handler | Um tratador de chamada de linguagem procedural é declarado como retornando o tipo language_handler |
cstring | Indica que a função recebe ou retorna uma cadeia de caracteres C terminada por nulo |
internal | Indica que a função recebe ou retorna um tipo de dado interno do servidor |
opaque | Um 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.