8.21. Pseudotipos #

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

NombreDescripción
anyIndica que una función acepta cualquier tipo de datos de entrada.
anyelementIndica que una función acepta cualquier tipo de datos (consulta la Section 36.2.5).
anyarrayIndica que una función acepta cualquier tipo de datos de arreglo (consulta la Section 36.2.5).
anynonarrayIndica que una función acepta cualquier tipo de datos que no sea un arreglo (consulta la Section 36.2.5).
anyenumIndica que una función acepta cualquier tipo de datos enum (consulta la Section 36.2.5 y la Section 8.7).
anyrangeIndica que una función acepta cualquier tipo de datos de rango (consulta la Section 36.2.5 y la Section 8.17).
anymultirangeIndica que una función acepta cualquier tipo de datos multirango (consulta la Section 36.2.5 y la Section 8.17).
anycompatibleIndica 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).
anycompatiblearrayIndica 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).
anycompatiblenonarrayIndica 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).
anycompatiblerangeIndica 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).
anycompatiblemultirangeIndica 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).
cstringIndica que una función acepta o devuelve una cadena C terminada en nulo.
internalIndica que una función acepta o devuelve un tipo de datos interno del servidor.
language_handlerSe declara que un manejador de llamadas a un lenguaje procedimental devuelve language_handler.
fdw_handlerSe declara que un manejador de envoltura de datos externos (foreign-data wrapper) devuelve fdw_handler.
table_am_handlerSe declara que un manejador de método de acceso a tablas devuelve table_am_handler.
index_am_handlerSe declara que un manejador de método de acceso a índices devuelve index_am_handler.
tsm_handlerSe declara que un manejador de método tablesample devuelve tsm_handler.
recordIdentifica una función que toma o devuelve un tipo de fila no especificado.
triggerSe declara que una función de disparo (trigger) devuelve trigger.
event_triggerSe declara que una función de disparo por evento (event trigger) devuelve event_trigger.
pg_ddl_commandIdentifica una representación de comandos DDL que está disponible para los disparadores por eventos.
voidIndica que una función no devuelve ningún valor.
unknownIdentifica 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.