34.16. columns

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

Таблица 34-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 колонка с ограничением не-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Относится к функциональности, отсутствующей в PostgreSQL (см. поле datetime_precision, определяющее точность в долях секунды для типов интервалов)
character_set_catalogsql_identifierОтносится к функциональности, отсутствующей в PostgreSQL
character_set_schemasql_identifierОтносится к функциональности, отсутствующей в PostgreSQL
character_set_namesql_identifierОтносится к функциональности, отсутствующей в PostgreSQL
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Относится к функциональности, отсутствующей в PostgreSQL
scope_schemasql_identifierОтносится к функциональности, отсутствующей в PostgreSQL
scope_namesql_identifierОтносится к функциональности, отсутствующей в PostgreSQL
maximum_cardinalitycardinal_numberВсегда NULL, так как массивы имеют неограниченную максимальную ёмкость в PostgreSQL
dtd_identifiersql_identifierИдентификатор дескриптора типа данных колонки, уникальный среди всех дескрипторов типов, относящихся к таблице. Он в основном полезен для соединения с другими экземплярами таких идентификаторов. (Конкретный формат идентификатора не определён и не гарантируется, что он останется неизменным в будущих версиях.)
is_self_referencingyes_or_noОтносится к функциональности, отсутствующей в PostgreSQL
is_identityyes_or_noОтносится к функциональности, отсутствующей в PostgreSQL
identity_generationcharacter_dataОтносится к функциональности, отсутствующей в PostgreSQL
identity_startcharacter_dataОтносится к функциональности, отсутствующей в PostgreSQL
identity_incrementcharacter_dataОтносится к функциональности, отсутствующей в PostgreSQL
identity_maximumcharacter_dataОтносится к функциональности, отсутствующей в PostgreSQL
identity_minimumcharacter_dataОтносится к функциональности, отсутствующей в PostgreSQL
identity_cycleyes_or_noОтносится к функциональности, отсутствующей в PostgreSQL
is_generatedcharacter_dataОтносится к функциональности, отсутствующей в PostgreSQL
generation_expressioncharacter_dataОтносится к функциональности, отсутствующей в PostgreSQL
is_updatableyes_or_noYES, если колонка допускает изменение, или 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) и т. п.