35.17. columns #

La vista columns contiene información sobre todas las columnas de tablas (o columnas de vistas) en la base de datos. Las columnas del sistema (ctid, etc.) no están incluidas. Solo se muestran aquellas columnas a las que el usuario actual tiene acceso (por ser el propietario o tener algún privilegio).

Table 35.15. columns Columns

Column Type

Description

table_catalog sql_identifier

Nombre de la base de datos que contiene la tabla (siempre la base de datos actual)

table_schema sql_identifier

Nombre del esquema que contiene la tabla

table_name sql_identifier

Nombre de la tabla

column_name sql_identifier

Nombre de la columna

ordinal_position cardinal_number

Posición ordinal de la columna dentro de la tabla (el conteo comienza en 1)

column_default character_data

Expresión por omisión de la columna

is_nullable yes_or_no

YES si la columna es posiblemente anulable (nullable), NO si se sabe que no es anulable. Una restricción de no nulo (not-null constraint) es una forma en que se puede saber que una columna no es anulable, pero puede haber otras.

data_type character_data

Tipo de datos de la columna, si es un tipo incorporado, o ARRAY si es un array (en ese caso, consulta la vista element_types), de lo contrario USER-DEFINED (en ese caso, el tipo se identifica en udt_name y sus columnas asociadas). Si la columna se basa en un dominio, esta columna se refiere al tipo subyacente del dominio (y el dominio se identifica en domain_name y sus columnas asociadas).

character_maximum_length cardinal_number

Si data_type identifica un tipo de cadena de caracteres o de bits, la longitud máxima declarada; nulo para todos los demás tipos de datos o si no se declaró ninguna longitud máxima.

character_octet_length cardinal_number

Si data_type identifica un tipo de caracteres, la longitud máxima posible en octetos (bytes) de un dato; nulo para todos los demás tipos de datos. La longitud máxima en octetos depende de la longitud máxima declarada en caracteres (ver arriba) y de la codificación del servidor.

numeric_precision cardinal_number

Si data_type identifica un tipo numérico, esta columna contiene la precisión (declarada o implícita) del tipo para esta columna. La precisión indica la cantidad de dígitos significativos. Se puede expresar en términos decimales (base 10) o binarios (base 2), como se especifica en la columna numeric_precision_radix. Para todos los demás tipos de datos, esta columna es nula.

numeric_precision_radix cardinal_number

Si data_type identifica un tipo numérico, esta columna indica en qué base se expresan los valores de las columnas numeric_precision y numeric_scale. El valor es 2 o 10. Para todos los demás tipos de datos, esta columna es nula.

numeric_scale cardinal_number

Si data_type identifica un tipo numérico exacto, esta columna contiene la escala (declarada o implícita) del tipo para esta columna. La escala indica la cantidad de dígitos significativos a la derecha del punto decimal. Se puede expresar en términos decimales (base 10) o binarios (base 2), como se especifica en la columna numeric_precision_radix. Para todos los demás tipos de datos, esta columna es nula.

datetime_precision cardinal_number

Si data_type identifica un tipo date, time, timestamp o interval, esta columna contiene la precisión de segundos fraccionarios (declarada o implícita) del tipo para esta columna, es decir, la cantidad de dígitos decimales que se mantienen después del punto decimal en el valor de los segundos. Para todos los demás tipos de datos, esta columna es nula.

interval_type character_data

Si data_type identifica un tipo interval, esta columna contiene la especificación de qué campos incluyen los intervalos para esta columna, por ejemplo, YEAR TO MONTH, DAY TO SECOND, etc. Si no se especificaron restricciones de campo (es decir, el intervalo acepta todos los campos), y para todos los demás tipos de datos, este campo es nulo.

interval_precision cardinal_number

Se aplica a una característica no disponible en PostgreSQL (consulta datetime_precision para la precisión de segundos fraccionarios de las columnas de tipo interval)

character_set_catalog sql_identifier

Se aplica a una característica no disponible en PostgreSQL

character_set_schema sql_identifier

Se aplica a una característica no disponible en PostgreSQL

character_set_name sql_identifier

Se aplica a una característica no disponible en PostgreSQL

collation_catalog sql_identifier

Nombre de la base de datos que contiene la colación de la columna (siempre la base de datos actual), nulo si es por omisión o si el tipo de datos de la columna no admite colación

collation_schema sql_identifier

Nombre del esquema que contiene la colación de la columna, nulo si es por omisión o si el tipo de datos de la columna no admite colación

collation_name sql_identifier

Nombre de la colación de la columna, nulo si es por omisión o si el tipo de datos de la columna no admite colación

domain_catalog sql_identifier

Si la columna tiene un tipo de dominio, el nombre de la base de datos en la que está definido el dominio (siempre la base de datos actual); de lo contrario, nulo.

domain_schema sql_identifier

Si la columna tiene un tipo de dominio, el nombre del esquema en el que está definido el dominio; de lo contrario, nulo.

domain_name sql_identifier

Si la columna tiene un tipo de dominio, el nombre del dominio; de lo contrario, nulo.

udt_catalog sql_identifier

Nombre de la base de datos en la que está definido el tipo de datos de la columna (el tipo subyacente del dominio, si corresponde) (siempre la base de datos actual)

udt_schema sql_identifier

Nombre del esquema en el que está definido el tipo de datos de la columna (el tipo subyacente del dominio, si corresponde)

udt_name sql_identifier

Nombre del tipo de datos de la columna (el tipo subyacente del dominio, si corresponde)

scope_catalog sql_identifier

Se aplica a una característica no disponible en PostgreSQL

scope_schema sql_identifier

Se aplica a una característica no disponible en PostgreSQL

scope_name sql_identifier

Se aplica a una característica no disponible en PostgreSQL

maximum_cardinality cardinal_number

Siempre nulo, porque los arrays siempre tienen una cardinalidad máxima ilimitada en PostgreSQL

dtd_identifier sql_identifier

Un identificador del descriptor del tipo de datos de la columna, único entre los descriptores de tipos de datos pertenecientes a la tabla. Esto es útil principalmente para realizar uniones con otras instancias de dichos identificadores. (El formato específico del identificador no está definido y no se garantiza que siga siendo el mismo en futuras versiones.)

is_self_referencing yes_or_no

Se aplica a una característica no disponible en PostgreSQL

is_identity yes_or_no

Si la columna es una columna de identidad, entonces YES, de lo contrario NO.

identity_generation character_data

Si la columna es una columna de identidad, entonces ALWAYS o BY DEFAULT, reflejando la definición de la columna.

identity_start character_data

Si la columna es una columna de identidad, entonces el valor inicial de la secuencia interna; de lo contrario, nulo.

identity_increment character_data

Si la columna es una columna de identidad, entonces el incremento de la secuencia interna; de lo contrario, nulo.

identity_maximum character_data

Si la columna es una columna de identidad, entonces el valor máximo de la secuencia interna; de lo contrario, nulo.

identity_minimum character_data

Si la columna es una columna de identidad, entonces el valor mínimo de la secuencia interna; de lo contrario, nulo.

identity_cycle yes_or_no

Si la columna es una columna de identidad, entonces YES si la secuencia interna cicla o NO si no; de lo contrario, nulo.

is_generated character_data

Si la columna es una columna generada, entonces ALWAYS, de lo contrario NEVER.

generation_expression character_data

Si la columna es una columna generada, entonces la expresión de generación, de lo contrario, nulo.

is_updatable yes_or_no

YES si la columna es actualizable, NO si no (las columnas en las tablas base siempre son actualizables, las columnas en las vistas no necesariamente)


Dado que los tipos de datos se pueden definir de diversas formas en SQL, y PostgreSQL contiene formas adicionales de definir tipos de datos, su representación en el esquema de información puede ser algo difícil. Se supone que la columna data_type identifica el tipo incorporado subyacente de la columna. En PostgreSQL, esto significa que el tipo está definido en el esquema del catálogo del sistema pg_catalog. Esta columna podría ser útil si la aplicación puede manejar los tipos incorporados conocidos de manera especial (por ejemplo, formatear los tipos numéricos de manera diferente o usar los datos en las columnas de precisión). Las columnas udt_name, udt_schema y udt_catalog siempre identifican el tipo de datos subyacente de la columna, incluso si la columna se basa en un dominio (dado que PostgreSQL trata los tipos incorporados como tipos definidos por el usuario, los tipos incorporados también aparecen aquí; esta es una extensión del estándar SQL). Estas columnas se deben usar si una aplicación desea procesar los datos de manera diferente según el tipo, porque en ese caso no importaría si la columna realmente se basa en un dominio. Si la columna se basa en un dominio, la identidad del dominio se almacena en las columnas domain_name, domain_schema y domain_catalog. Si deseas emparejar las columnas con sus tipos de datos asociados y tratar los dominios como tipos separados, podrías escribir coalesce(domain_name, udt_name), etc.