38.16. columns

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

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

ИмяТип данныхОписание
table_catalogsql_identifierИмя базы данных, содержащей таблицу (всегда текущая база)
table_schemasql_identifierИмя схемы, содержащей таблицу
table_namesql_identifierИмя таблицы
column_namesql_identifierИмя столбца
ordinal_positioncardinal_numberПорядковый номер столбца в таблице (нумерация начинается с 1)
column_defaultcharacter_dataВыражение по умолчанию для столбца
is_nullableyes_or_noYES, если столбец может содержать NULL, или NO, если он не принимает NULL. Не будет принимать NULL столбец с ограничением NOT NULL, но возможны и другие варианты.
data_typecharacter_dataТип данных столбца, если это встроенный тип, либо ARRAY, если это массив (в этом случае обратитесь к представлению element_types), иначе — USER-DEFINED (в этом случае тип определяется в udt_name и связанных столбцах). Если столбец основан на домене, данный столбец показывает нижележащий тип домена (а сам домен показывается в domain_name и связанных столбцах).
character_maximum_lengthcardinal_numberЕсли в data_type указан тип текстовой или битовой строки, это поле задаёт её объявленную максимальную длину; NULL для всех других типов данных, либо если максимальная длина не объявлена.
character_octet_lengthcardinal_numberЕсли в data_type указан тип символьной строки, это поле задаёт её максимально возможный размер в октетах (байтах); NULL для всех других типов данных. Максимальный размер в октетах зависит от объявленной максимальной длины в символах (см. выше) и от кодировки сервера.
numeric_precisioncardinal_numberЕсли в data_type указан числовой тип, этот столбец содержит точность (объявленную или неявную) типа для целевого столбца. Точность определяет число значащих цифр. Она может выражаться в десятичных (по основанию 10) или двоичных (по основанию 2) цифрах, согласно столбцу numeric_precision_radix. Для всех других типов данных этот столбец содержит NULL.
numeric_precision_radixcardinal_numberЕсли в data_type указан числовой тип, в этом столбце определяется, по какому основанию задаются значения в столбцах numeric_precision и numeric_scale. Возможные варианты: 2 или 10. Для всех других типов данных этот столбец содержит NULL.
numeric_scalecardinal_numberЕсли в data_type указан точный числовой тип, этот столбец содержит масштаб (объявленный или неявный) типа для целевого столбца. Масштаб определяет число значащих цифр справа от десятичной точки. Он может выражаться в десятичных (по основанию 10) или двоичных (по основанию 2) цифрах, согласно столбцу numeric_precision_radix. Для всех других типов данных этот столбец содержит NULL.
datetime_precisioncardinal_numberЕсли в data_type указан тип даты, времени, отметки времени или интервала, этот столбец содержит точность (объявленную или неявную) в долях секунды типа для целевого столбца, то есть число десятичных цифр, сохраняемых после десятичной точки в значении секунд. Для всех других типов данных этот столбец содержит NULL.
interval_typecharacter_dataЕсли в data_type указан тип интервала, этот столбец определяет, какие поля принимает интервал в целевом столбце, например: YEAR TO MONTH, DAY TO SECOND и т. д. Если ограничения для полей не заданы (то есть, интервал принимает все поля), и для любых других типов данных это поле содержит NULL.
interval_precisioncardinal_numberОтносится к функциональности, отсутствующей в Postgres Pro (см. поле datetime_precision, определяющее точность в долях секунды для типов интервалов)
character_set_catalogsql_identifierОтносится к функциональности, отсутствующей в Postgres Pro
character_set_schemasql_identifierОтносится к функциональности, отсутствующей в Postgres Pro
character_set_namesql_identifierОтносится к функциональности, отсутствующей в Postgres Pro
collation_catalogsql_identifierИмя базы данных, содержащей правило сортировки столбца (это всегда текущая база), либо NULL, если это правило по умолчанию или тип данных столбца несортируемый
collation_schemasql_identifierИмя схемы, содержащей правило сортировки столбца, либо NULL, если это правило по умолчанию или тип данных столбца несортируемый
collation_namesql_identifierИмя правила сортировки столбца, либо NULL, если это правило по умолчанию или тип данных столбца несортируемый
domain_catalogsql_identifierЕсли целевой столбец имеет тип домена, этот столбец содержит имя базы данных, в которой определён домен (всегда текущая база), иначе — NULL.
domain_schemasql_identifierЕсли целевой столбец имеет тип домена, этот столбец содержит имя схемы, в которой определён домен, иначе — NULL.
domain_namesql_identifierЕсли целевой столбец имеет тип домена, этот столбец содержит имя домена, иначе — NULL.
udt_catalogsql_identifierИмя базы данных, в которой определён тип (если применимо, нижележащий тип домена) столбца (всегда текущая база)
udt_schemasql_identifierИмя схемы, в которой определён тип (если применимо, нижележащий тип домена) столбца (всегда текущая база)
udt_namesql_identifierИмя типа данных столбца (если применимо, нижележащий тип домена)
scope_catalogsql_identifierОтносится к функциональности, отсутствующей в Postgres Pro
scope_schemasql_identifierОтносится к функциональности, отсутствующей в Postgres Pro
scope_namesql_identifierОтносится к функциональности, отсутствующей в Postgres Pro
maximum_cardinalitycardinal_numberВсегда NULL, так как массивы имеют неограниченную максимальную ёмкость в Postgres Pro
dtd_identifiersql_identifierИдентификатор дескриптора типа данных столбца, уникальный среди всех дескрипторов типов, относящихся к таблице. Он в основном полезен для соединения с другими экземплярами таких идентификаторов. (Конкретный формат идентификатора не определён и не гарантируется, что он останется неизменным в будущих версиях.)
is_self_referencingyes_or_noОтносится к функциональности, отсутствующей в Postgres Pro
is_identityyes_or_noЕсли целевой столбец является столбцом идентификации, значение YES, иначе — NO.
identity_generationcharacter_dataЕсли целевой столбец является столбцом идентификации, значение ALWAYS или BY DEFAULT, отражающее определение столбца.
identity_startcharacter_dataЕсли целевой столбец является столбцом идентификации, начальное значение внутренней последовательности, иначе — NULL.
identity_incrementcharacter_dataЕсли целевой столбец является столбцом идентификации, шаг внутренней последовательности, иначе — NULL.
identity_maximumcharacter_dataЕсли целевой столбец является столбцом идентификации, максимальное значение внутренней последовательности, иначе — NULL.
identity_minimumcharacter_dataЕсли целевой столбец является столбцом идентификации, минимальное значение внутренней последовательности, иначе — NULL.
identity_cycleyes_or_noЕсли целевой столбец является столбцом идентификации, YES показывает, что внутренняя последовательность зацикливается, NO — не зацикливается, иначе — NULL.
is_generatedcharacter_dataОтносится к функциональности, отсутствующей в Postgres Pro
generation_expressioncharacter_dataОтносится к функциональности, отсутствующей в Postgres Pro
is_updatableyes_or_noYES, если столбец допускает изменение, или NO в противном случае (столбцы в базовых таблицах всегда изменяемые, но в представлениях — не обязательно)

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