52.64. pg_type #

El catálogo pg_type almacena información sobre los tipos de datos. Los tipos base y los tipos enumerados (tipos escalares) se crean con CREATE TYPE, y los dominios con CREATE DOMAIN. Se crea automáticamente un tipo compuesto para cada tabla de la base de datos, para representar la estructura de filas de la tabla. También es posible crear tipos compuestos con CREATE TYPE AS.

Table 52.64. Columnas de pg_type

Tipo y columna

Descripción

oid oid

Identificador de fila

typname name

Nombre del tipo de datos

typnamespace oid (hace referencia a pg_namespace.oid)

El OID del espacio de nombres que contiene este tipo

typowner oid (hace referencia a pg_authid.oid)

Propietario del tipo

typlen int2

Para un tipo de tamaño fijo, typlen es el número de bytes en la representación interna del tipo. Pero para un tipo de longitud variable, typlen es negativo. -1 indica un tipo varlena (uno que tiene una palabra de longitud), -2 indica una cadena de caracteres de C terminada en nulo.

typbyval bool

typbyval determina si las rutinas internas pasan un valor de este tipo por valor o por referencia. Es mejor que typbyval sea falso si typlen no es 1, 2 o 4 (u 8 en máquinas donde Datum es de 8 bytes). Los tipos de longitud variable siempre se pasan por referencia. Ten en cuenta que typbyval puede ser falso incluso si la longitud permitiría el paso por valor.

typtype char

typtype es b para un tipo base, c para un tipo compuesto (por ejemplo, el tipo de fila de una tabla), d para un dominio, e para un tipo enumerado, p para un pseudotipo, r para un tipo de rango, o m para un tipo de multirango. Consulta también typrelid y typbasetype.

typcategory char

typcategory es una clasificación arbitraria de tipos de datos que utiliza el analizador para determinar qué conversiones implícitas (casts) deberían ser preferidas. Consulta Table 52.65.

typispreferred bool

Verdadero si el tipo es un objetivo de conversión preferido dentro de su typcategory

typisdefined bool

Verdadero si el tipo está definido, falso si es una entrada de marcador de posición para un tipo aún no definido. Cuando typisdefined es falso, no se puede confiar en nada excepto en el nombre del tipo, el espacio de nombres y el OID.

typdelim char

Carácter que separa dos valores de este tipo al analizar la entrada de un array. Ten en cuenta que el delimitador está asociado con el tipo de datos del elemento del array, no con el tipo de datos del array.

typrelid oid (hace referencia a pg_class.oid)

Si este es un tipo compuesto (ver typtype), entonces esta columna apunta a la entrada de pg_class que define la tabla correspondiente. (Para un tipo compuesto independiente, la entrada de pg_class realmente no representa una tabla, pero se necesita de todos modos para enlazar las entradas de pg_attribute del tipo). Cero para tipos no compuestos.

typsubscript regproc (hace referencia a pg_proc.oid)

El OID de la función manejadora de subíndices, o cero si este tipo no admite subíndices. Los tipos que son tipos de array verdaderos tienen typsubscript = array_subscript_handler, pero otros tipos pueden tener otras funciones manejadoras para implementar comportamientos de subíndices especializados.

typelem oid (hace referencia a pg_type.oid)

Si typelem no es cero, identifica otra fila en pg_type, que define el tipo obtenido mediante el uso de subíndices. Esto debería ser cero si typsubscript es cero. Sin embargo, puede ser cero cuando typsubscript no es cero, si el manejador no necesita de typelem para determinar el tipo del resultado del subíndice. Ten en cuenta que se considera que una dependencia de typelem implica la contención física del tipo de elemento en este tipo; por lo tanto, los cambios de DDL en el tipo de elemento podrían estar restringidos por la presencia de este tipo.

typarray oid (hace referencia a pg_type.oid)

Si typarray no es cero, identifica otra fila en pg_type, que es el tipo de array verdadero que tiene a este tipo como elemento

typinput regproc (hace referencia a pg_proc.oid)

Función de conversión de entrada (formato de texto)

typoutput regproc (hace referencia a pg_proc.oid)

Función de conversión de salida (formato de texto)

typreceive regproc (hace referencia a pg_proc.oid)

Función de conversión de entrada (formato binario), o cero si no hay

typsend regproc (hace referencia a pg_proc.oid)

Función de conversión de salida (formato binario), o cero si no hay

typmodin regproc (hace referencia a pg_proc.oid)

Función de entrada del modificador de tipo, o cero si el tipo no admite modificadores

typmodout regproc (hace referencia a pg_proc.oid)

Función de salida del modificador de tipo, o cero para utilizar el formato estándar

typanalyze regproc (hace referencia a pg_proc.oid)

Función ANALYZE personalizada, o cero para utilizar la función estándar

typalign char

typalign es la alineación requerida al almacenar un valor de este tipo. Se aplica tanto al almacenamiento en disco como a la mayoría de las representaciones del valor dentro de PostgreSQL. Cuando se almacenan varios valores de forma consecutiva, como en la representación de una fila completa en el disco, se inserta un relleno (padding) antes del dato de este tipo para que comience en el límite especificado. La referencia de alineación es el comienzo del primer dato de la secuencia. Los valores posibles son:

  • Alineación c = char, es decir, no se necesita alineación.

  • Alineación s = short (2 bytes en la mayoría de las máquinas).

  • Alineación i = int (4 bytes en la mayoría de las máquinas).

  • Alineación d = double (8 bytes en muchas máquinas, pero no en todas).

typstorage char

typstorage indica para los tipos varlena (aquellos con typlen = -1) si el tipo está preparado para toasting y cuál debería ser la estrategia predeterminada para los atributos de este tipo. Los valores posibles son:

  • p (plain): Los valores siempre deben almacenarse sin formato (los tipos que no son varlena siempre usan este valor).

  • e (external): Los valores se pueden almacenar en una relación TOAST secundaria (si la relación tiene una, consulta pg_class.reltoastrelid).

  • m (main): Los valores se pueden comprimir y almacenar en línea (inline).

  • x (extended): Los valores se pueden comprimir y/o mover a una relación secundaria.

x es la elección habitual para tipos que admiten TOAST. Ten en cuenta que los valores m también pueden trasladarse al almacenamiento secundario, pero solo como último recurso (los valores e y x se mueven primero).

typnotnull bool

typnotnull representa una restricción de no nulo (not-null) en un tipo. Se usa solo para dominios.

typbasetype oid (hace referencia a pg_type.oid)

Si este es un dominio (ver typtype), entonces typbasetype identifica el tipo en el que se basa. Cero si este tipo no es un dominio.

typtypmod int4

Los dominios usan typtypmod para registrar el typmod que se aplicará a su tipo base (-1 si el tipo base no usa un typmod). -1 si este tipo no es un dominio.

typndims int4

typndims es el número de dimensiones del array para un dominio sobre un array (es decir, typbasetype es un tipo de array). Cero para tipos que no sean dominios sobre tipos de array.

typcollation oid (hace referencia a pg_collation.oid)

typcollation especifica la intercalación (collation) del tipo. Si el tipo no admite intercalaciones, será cero. Un tipo base que admita intercalaciones tendrá un valor distinto de cero aquí, típicamente DEFAULT_COLLATION_OID. Un dominio sobre un tipo intercalable puede tener un OID de intercalación diferente al de su tipo base, si se especificó uno para el dominio.

typdefaultbin pg_node_tree

Si typdefaultbin no es nulo, es la representación nodeToString() de una expresión predeterminada para el tipo. Esto solo se usa para dominios.

typdefault text

typdefault es nulo si el tipo no tiene un valor predeterminado asociado. Si typdefaultbin no es nulo, typdefault debe contener una versión legible por humanos de la expresión predeterminada representada por typdefaultbin. Si typdefaultbin es nulo y typdefault no lo es, entonces typdefault es la representación externa del valor predeterminado del tipo, que se puede pasar al convertidor de entrada del tipo para producir una constante.

typacl aclitem[]

Privilegios de acceso; consulta Section 5.8 para obtener detalles


Note

Para los tipos de ancho fijo utilizados en las tablas del sistema, es crítico que el tamaño y la alineación definidos en pg_type coincidan con la forma en que el compilador distribuirá la columna en una estructura que representa una fila de tabla.

Table 52.65 enumera los valores definidos por el sistema para typcategory. Cualquier incorporación futura a esta lista también consistirá en letras ASCII en mayúsculas. Todos los demás caracteres ASCII están reservados para categorías definidas por el usuario.

Table 52.65. Códigos de typcategory

CódigoCategoría
ATipos array
BTipos booleanos
CTipos compuestos
DTipos de fecha/hora
ETipos enumerados
GTipos geométricos
ITipos de dirección de red
NTipos numéricos
PPseudotipos
RTipos de rango
STipos de cadena de caracteres
TTipos de intervalo de tiempo
UTipos definidos por el usuario
VTipos de cadena de bits
XTipo unknown
ZTipos de uso interno