O sistema de tipos de dados do PostgreSQL contém várias entradas de propósito especial, chamadas coletivamente de pseudotipos. Um pseudotipo não pode ser usado como tipo de dados de coluna, mas pode ser usado para declarar o argumento ou o tipo de dados do resultado de uma função. Cada um dos pseudotipos disponíveis é útil em situações onde o comportamento de uma função não corresponde a apenas aceitar ou retornar o valor de um determinado tipo de dados do SQL. A Tabela 8.27 lista os pseudotipos existentes.
Tabela 8.27. Pseudotipos
| Nome | Descrição |
|---|---|
any | Indica que a função aceita qualquer tipo de dados de entrada. |
anyelement | Indica que a função aceita qualquer tipo de dados (veja a Seção 36.2.5). |
anyarray | Indica que a função aceita qualquer tipo de dados matriz (veja a Seção 36.2.5). |
anynonarray | Indica que a função aceita qualquer tipo de dados não-matriz (veja a Seção 36.2.5). |
anyenum | Indica que a função aceita qualquer tipo de dados enum (veja a Seção 36.2.5 e Seção 8.7). |
anyrange | Indica que a função aceita qualquer tipo de dados de intervalo (veja a Seção 36.2.5 e Seção 8.17). |
anymultirange | Indica que a função aceita qualquer tipo de dados multi-intervalo (veja a Seção 36.2.5 e Seção 8.17). |
anycompatible | Indica que a função aceita qualquer tipo de dados, com promoção automática dos vários argumentos para um tipo de dados comum (veja a Seção 36.2.5). |
anycompatiblearray | Indica que a função aceita qualquer tipo de dados matriz, com promoção automática dos vários argumentos para um tipo de dados comum (veja a Seção 36.2.5). |
anycompatiblenonarray | Indica que a função aceita qualquer tipo de dados não-matriz, com promoção automática dos vários argumentos para um tipo de dados comum (veja a Seção 36.2.5). |
anycompatiblerange | Indica que a função aceita qualquer tipo de dados de intervalo, com promoção automática dos vários argumentos para um tipo de dados comum (veja a Seção 36.2.5 e a Seção 8.17). |
anycompatiblemultirange | Indica que a função aceita qualquer tipo de dados multi-intervalo, com promoção automática dos vários argumentos para um tipo de dados comum (veja a Seção 36.2.5 e a Seção 8.17). |
cstring | Indica que uma função aceita ou retorna uma cadeia de caracteres C terminada em nulo. |
internal | Indica que uma função aceita ou retorna um tipo de dados interno do servidor. |
language_handler | Um tratador (handler) de
chamada de linguagem procedural é declarado retornando um
language_handler. |
fdw_handler | Um tratador (handler) de
empacotador de dados estrangeiros
(foreign-data wrapper) é
declarado retornando um fdw_handler. |
table_am_handler | Um tratador (handler) de
método de acesso a tabela é declarado retornando
table_am_handler. |
index_am_handler | Um tratador (handler) de
método de acesso a índice é declarado retornando
index_am_handler. |
tsm_handler | Um tratador (handler) de
método de amostragem de tabela é declarado retornando
tsm_handler. |
record | Identifica uma função que aceita ou retorna um tipo de dados linha [a] não especificado. |
trigger | Uma função de gatilho é declarada retornando
trigger. |
event_trigger | Uma função de gatilho de evento é declarada retornando
event_trigger. |
pg_ddl_command | Identifica uma representação de comandos DDL que está disponível para gatilhos de eventos. |
void | Indica que a função não retorna nenhum valor. |
unknown | Identifica um tipo de dados ainda não resolvido, por exemplo, de um literal cadeia de caracteres sem delimitadores. |
[a] Um tipo de dados linha é uma sequência de pares (<nome do campo> <tipo de dados>), chamados campos. ISO/IEC 9075-2:1999 (E) – 4.9 Row types (N. T.) | |
Funções escritas em C (sejam incorporadas ou carregadas dinamicamente) podem ser declaradas como aceitando ou retornando qualquer um desses pseudotipos. Cabe ao autor da função garantir que a função se comporte com segurança quando um pseudotipo é usado como tipo de dados do argumento.
Funções codificadas em linguagens procedurais podem usar pseudotipos
apenas conforme seja permitido por suas linguagens de implementação.
No momento, a maioria das linguagens procedurais proíbe o uso de
pseudotipo como tipo de dados de argumento, permitindo apenas
void e record como tipo de dados de resultado
(além de trigger ou event_trigger quando
a função é usada como gatilho, ou gatilho de evento).
Algumas linguagens também dão suporte a funções polimórficas usando
os pseudotipos polimórficos mostrados acima, e discutidos em
detalhes na Seção 36.2.5.
O pseudotipo internal é usado para declarar funções que
devem ser chamadas apenas internamente pelo sistema de banco de dados,
e não por chamada direta em uma consulta SQL.
Se a função tem pelo menos um argumento do tipo de dados internal,
então ela não pode ser chamada a partir do SQL.
Para preservar a segurança de tipo de dados dessa restrição é
importante seguir essa regra de codificação: não criar nenhuma função
retornando internal, a menos que tenha pelo menos um
argumento internal.