El sistema de tipos de PostgreSQL contiene una serie de entradas de propósito especial que se denominan colectivamente pseudotipos. Un pseudotipo no se puede utilizar como un tipo de datos de columna, pero se puede utilizar para declarar el tipo de argumento o de resultado de una función. Cada uno de los pseudotipos disponibles es útil en situaciones donde el comportamiento de una función no corresponde simplemente a tomar o devolver un valor de un tipo de datos SQL específico. La Table 8.27 enumera los pseudotipos existentes.
Table 8.27. Pseudotipos
| Nombre | Descripción |
|---|---|
any | Indica que una función acepta cualquier tipo de datos de entrada. |
anyelement | Indica que una función acepta cualquier tipo de datos (consulta la Section 36.2.5). |
anyarray | Indica que una función acepta cualquier tipo de datos de arreglo (consulta la Section 36.2.5). |
anynonarray | Indica que una función acepta cualquier tipo de datos que no sea un arreglo (consulta la Section 36.2.5). |
anyenum | Indica que una función acepta cualquier tipo de datos enum (consulta la Section 36.2.5 y la Section 8.7). |
anyrange | Indica que una función acepta cualquier tipo de datos de rango (consulta la Section 36.2.5 y la Section 8.17). |
anymultirange | Indica que una función acepta cualquier tipo de datos multirango (consulta la Section 36.2.5 y la Section 8.17). |
anycompatible | Indica que una función acepta cualquier tipo de datos, con promoción automática de múltiples argumentos a un tipo de datos común (consulta la Section 36.2.5). |
anycompatiblearray | Indica que una función acepta cualquier tipo de datos de arreglo, con promoción automática de múltiples argumentos a un tipo de datos común (consulta la Section 36.2.5). |
anycompatiblenonarray | Indica que una función acepta cualquier tipo de datos que no sea un arreglo, con promoción automática de múltiples argumentos a un tipo de datos común (consulta la Section 36.2.5). |
anycompatiblerange | Indica que una función acepta cualquier tipo de datos de rango, con promoción automática de múltiples argumentos a un tipo de datos común (consulta la Section 36.2.5 y la Section 8.17). |
anycompatiblemultirange | Indica que una función acepta cualquier tipo de datos multirango, con promoción automática de múltiples argumentos a un tipo de datos común (consulta la Section 36.2.5 y la Section 8.17). |
cstring | Indica que una función acepta o devuelve una cadena C terminada en nulo. |
internal | Indica que una función acepta o devuelve un tipo de datos interno del servidor. |
language_handler | Se declara que un manejador de llamadas a un lenguaje procedimental devuelve language_handler. |
fdw_handler | Se declara que un manejador de envoltura de datos externos (foreign-data wrapper) devuelve fdw_handler. |
table_am_handler | Se declara que un manejador de método de acceso a tablas devuelve table_am_handler. |
index_am_handler | Se declara que un manejador de método de acceso a índices devuelve index_am_handler. |
tsm_handler | Se declara que un manejador de método tablesample devuelve tsm_handler. |
record | Identifica una función que toma o devuelve un tipo de fila no especificado. |
trigger | Se declara que una función de disparo (trigger) devuelve trigger. |
event_trigger | Se declara que una función de disparo por evento (event trigger) devuelve event_trigger. |
pg_ddl_command | Identifica una representación de comandos DDL que está disponible para los disparadores por eventos. |
void | Indica que una función no devuelve ningún valor. |
unknown | Identifica un tipo aún no resuelto, por ejemplo, el de un literal de cadena no decorado. |
Las funciones codificadas en C (ya sean integradas o cargadas dinámicamente) pueden declararse para aceptar o devolver cualquiera de estos pseudotipos. Corresponde al autor de la función asegurarse de que la función se comporte de manera segura cuando se utiliza un pseudotipo como tipo de argumento.
Las funciones codificadas en lenguajes procedimentales pueden utilizar pseudotipos solo como
lo permitan sus lenguajes de implementación. En la actualidad, la mayoría de los lenguajes procedimentales
prohíben el uso de un pseudotipo como tipo de argumento, y permiten
únicamente void y record como tipo de resultado (además de
trigger o event_trigger cuando la función se utiliza
como un disparador o un disparador por evento). Algunos también admiten funciones polimórficas
utilizando los pseudotipos polimórficos, que se muestran arriba y se discuten
en detalle en la Section 36.2.5.
El pseudotipo internal se utiliza para declarar funciones
que están destinadas únicamente a ser llamadas internamente por el sistema
de la base de datos, y no por invocación directa en una consulta SQL.
Si una función tiene al menos un argumento de tipo
internal, entonces no se puede llamar desde SQL. Para
preservar la seguridad de tipos de esta restricción, es importante
seguir esta regla de codificación: no crees ninguna función que esté
declarada para devolver internal a menos que tenga al menos un
argumento de tipo internal.