37.17. columns #

Представление columns содержит информацию обо всех столбцах таблиц (или столбцах представлений) в базе данных. Системные столбцы (ctid и т. д.) в нём не отображаются. В нём показываются только те столбцы, к которым имеет доступ текущий пользователь (являясь владельцем или имея некоторые права).

Таблица 37.15. Столбцы columns

Тип столбца

Описание

table_catalog sql_identifier

Имя базы данных, содержащей таблицу (всегда текущая база)

table_schema sql_identifier

Имя схемы, содержащей таблицу

table_name sql_identifier

Имя таблицы

column_name sql_identifier

Имя столбца

ordinal_position cardinal_number

Порядковый номер столбца в таблице (нумерация начинается с 1)

column_default character_data

Выражение по умолчанию для столбца

is_nullable yes_or_no

YES, если столбец может содержать NULL, или NO, если он не принимает NULL. Не будет принимать NULL столбец с ограничением NOT NULL, но возможны и другие варианты.

data_type character_data

Тип данных столбца, если это встроенный тип, либо ARRAY, если это массив (в этом случае обратитесь к представлению element_types), иначе — USER-DEFINED (в этом случае тип определяется в udt_name и связанных столбцах). Если столбец основан на домене, данный столбец показывает нижележащий тип домена (а сам домен показывается в domain_name и связанных столбцах).

character_maximum_length cardinal_number

Если в data_type указан тип текстовой или битовой строки, это поле задаёт её объявленную максимальную длину; NULL для всех других типов данных, либо если максимальная длина не объявлена.

character_octet_length cardinal_number

Если в data_type указан тип символьной строки, это поле задаёт её максимально возможный размер в октетах (байтах); NULL для всех других типов данных. Максимальный размер в октетах зависит от объявленной максимальной длины в символах (см. выше) и от кодировки сервера.

numeric_precision cardinal_number

Если в data_type указан числовой тип, этот столбец содержит точность (объявленную или неявную) типа для целевого столбца. Точность определяет число значащих цифр. Она может выражаться в десятичных (по основанию 10) или двоичных (по основанию 2) цифрах, согласно столбцу numeric_precision_radix. Для всех других типов данных этот столбец содержит NULL.

numeric_precision_radix cardinal_number

Если в data_type указан числовой тип, в этом столбце определяется, по какому основанию задаются значения в столбцах numeric_precision и numeric_scale. Возможные варианты: 2 или 10. Для всех других типов данных этот столбец содержит NULL.

numeric_scale cardinal_number

Если в data_type указан точный числовой тип, этот столбец содержит масштаб (объявленный или неявный) типа для целевого столбца. Масштаб определяет число значащих цифр справа от десятичной точки. Он может выражаться в десятичных (по основанию 10) или двоичных (по основанию 2) цифрах, согласно столбцу numeric_precision_radix. Для всех других типов данных этот столбец содержит NULL.

datetime_precision cardinal_number

Если в data_type указан тип даты, времени, отметки времени или интервала, этот столбец содержит точность (объявленную или неявную) в долях секунды типа для целевого столбца, то есть число десятичных цифр, сохраняемых после десятичной точки в значении секунд. Для всех других типов данных этот столбец содержит NULL.

interval_type character_data

Если в data_type указан тип интервала, этот столбец определяет, какие поля принимает интервал в целевом столбце, например: YEAR TO MONTH, DAY TO SECOND и т. д. Если ограничения для полей не заданы (то есть, интервал принимает все поля), и для любых других типов данных это поле содержит NULL.

interval_precision cardinal_number

Относится к функциональности, отсутствующей в PostgreSQL (см. поле datetime_precision, определяющее точность в долях секунды для типов интервалов)

character_set_catalog sql_identifier

Относится к функциональности, отсутствующей в PostgreSQL

character_set_schema sql_identifier

Относится к функциональности, отсутствующей в PostgreSQL

character_set_name sql_identifier

Относится к функциональности, отсутствующей в PostgreSQL

collation_catalog sql_identifier

Имя базы данных, содержащей правило сортировки столбца (это всегда текущая база), либо NULL, если это правило по умолчанию или тип данных столбца несортируемый

collation_schema sql_identifier

Имя схемы, содержащей правило сортировки столбца, либо NULL, если это правило по умолчанию или тип данных столбца несортируемый

collation_name sql_identifier

Имя правила сортировки столбца, либо NULL, если это правило по умолчанию или тип данных столбца несортируемый

domain_catalog sql_identifier

Если целевой столбец имеет тип домена, этот столбец содержит имя базы данных, в которой определён домен (всегда текущая база), иначе — NULL.

domain_schema sql_identifier

Если целевой столбец имеет тип домена, этот столбец содержит имя схемы, в которой определён домен, иначе — NULL.

domain_name sql_identifier

Если целевой столбец имеет тип домена, этот столбец содержит имя домена, иначе — NULL.

udt_catalog sql_identifier

Имя базы данных, в которой определён тип (если применимо, нижележащий тип домена) столбца (всегда текущая база)

udt_schema sql_identifier

Имя схемы, в которой определён тип (если применимо, нижележащий тип домена) столбца (всегда текущая база)

udt_name sql_identifier

Имя типа данных столбца (если применимо, нижележащий тип домена)

scope_catalog sql_identifier

Относится к функциональности, отсутствующей в PostgreSQL

scope_schema sql_identifier

Относится к функциональности, отсутствующей в PostgreSQL

scope_name sql_identifier

Относится к функциональности, отсутствующей в PostgreSQL

maximum_cardinality cardinal_number

Всегда NULL, так как массивы имеют неограниченную максимальную ёмкость в PostgreSQL

dtd_identifier sql_identifier

Идентификатор дескриптора типа данных столбца, уникальный среди всех дескрипторов типов, относящихся к таблице. Он в основном полезен для соединения с другими экземплярами таких идентификаторов. (Конкретный формат идентификатора не определён и не гарантируется, что он останется неизменным в будущих версиях.)

is_self_referencing yes_or_no

Относится к функциональности, отсутствующей в PostgreSQL

is_identity yes_or_no

Если целевой столбец является столбцом идентификации, значение YES, иначе — NO.

identity_generation character_data

Если целевой столбец является столбцом идентификации, значение ALWAYS или BY DEFAULT, отражающее определение столбца.

identity_start character_data

Если целевой столбец является столбцом идентификации, начальное значение внутренней последовательности, иначе — NULL.

identity_increment character_data

Если целевой столбец является столбцом идентификации, шаг внутренней последовательности, иначе — NULL.

identity_maximum character_data

Если целевой столбец является столбцом идентификации, максимальное значение внутренней последовательности, иначе — NULL.

identity_minimum character_data

Если целевой столбец является столбцом идентификации, минимальное значение внутренней последовательности, иначе — NULL.

identity_cycle yes_or_no

Если целевой столбец является столбцом идентификации, YES показывает, что внутренняя последовательность зацикливается, NO — не зацикливается, иначе — NULL.

is_generated character_data

ALWAYS, если целевой столбец является генерируемым, иначе — NEVER.

generation_expression character_data

Генерирующее выражение, если целевой столбец является генерируемым, иначе — NULL.

is_updatable yes_or_no

YES, если столбец допускает изменение, или NO в противном случае (столбцы в базовых таблицах всегда изменяемые, но в представлениях — не обязательно)


Так как типы данных могут определяться в SQL множеством способов и PostgreSQL добавляет дополнительные варианты, представление типов в информационной схеме может быть довольно сложным. Столбец data_type предназначен для идентификации нижележащего встроенного типа столбца. В PostgreSQL это означает, что данный тип определён в схеме системного каталога pg_catalog. Этот столбец может быть полезным, если приложение способно особым образом воспринимать встроенные типы (например, форматировать числовые типы по-другому или задействовать данные в столбцах точности). Столбцы udt_name, udt_schema и udt_catalog всегда указывают на нижележащий тип данных столбца, даже если столбец основан на домене. (Так как в PostgreSQL встроенные типы не отличаются от определённых пользователем, в этом представлении выводятся и они. Это расширение стандарта SQL.) Эти столбцы должны учитываться, когда приложению нужно обрабатывать данные в зависимости от типа, так как в этом случае не важно, основан ли столбец на домене. Если столбец основан на домене, на него указывают столбцы domain_name, domain_schema и domain_catalog. Если вы хотите связать столбцы с их типами данных и обработать домены как отдельные типы, вы можете записать coalesce(domain_name, udt_name) и т. п.