49.7. pg_attribute

В каталоге pg_attribute хранится информация о столбцах таблицы. Для каждого столбца каждой таблицы в pg_attribute существует ровно одна строка. (Также в этом каталоге будут записи для индексов и на самом деле для всех объектов, присутствующих в pg_class.)

Термин «атрибут» равнозначен «столбцу» и употребляется по историческим причинам.

Таблица 49-7. Столбцы pg_attribute

ИмяТипСсылкиОписание
attrelid oid pg_class.oid Таблица, к которой принадлежит столбец
attname name  Имя столбца
atttypid oid pg_type.oid Тип данных этого столбца
attstattarget int4  Столбец attstattarget управляет детализацией статистики, собираемой по этому столбцу командой ANALYZE. Нулевое значение указывает, что статистика не собирается. При отрицательном значении используется системное ограничение статистики по умолчанию. Точное значение положительных величин определяется типом данных. Для скалярных типов данных, attstattarget задаёт и целевое число собираемых "самых частых значений", и целевое число создаваемых групп гистограммы.
attlen int2  Копия pg_type.typlen из записи типа столбца
attnum int2  Порядковый номер столбца. Обычные столбцы нумеруются по возрастанию, начиная с 1. Системные столбцы, такие как oid, имеют (обычно) отрицательные номера.
attndims int4  Число размерностей, если столбец имеет тип массива; 0 в противном случае. (В настоящее время число размерностей массива не контролируется, поэтому любое ненулевое значение по сути означает "это массив".)
attcacheoff int4  Всегда -1 в постоянном хранилище, но когда запись загружается в память, в этом поле может кешироваться смещение атрибута в строке
atttypmod int4  В поле atttypmod записывается дополнительное число, связанное с определённым типом данных, указываемое при создании таблицы (например, максимальный размер столбца varchar). Это значение передаётся функциям ввода и преобразования длины конкретного типа. Для типов, которым не нужен atttypmod, это обычно -1.
attbyval bool  Копия pg_type.typbyval из записи типа столбца
attstorage char  Обычно копия pg_type.typstorage из записи типа столбца. Для типов, поддерживающих TOAST, можно изменять это значение после создания столбца и таким образом управлять политикой хранения.
attalign char  Копия pg_type.typalign из записи типа столбца
attnotnull bool  Представляет ограничение NOT NULL.
atthasdef bool  Столбец имеет значение по умолчанию, в этом случае в каталоге pg_attrdef будет соответствующая запись, определяющая это значение.
attisdropped bool  Столбец была удалён и теперь не является рабочим. Удалённый столбец может по-прежнему физически присутствовать в таблице, но анализатор запросов его игнорирует, так что обратиться к нему из SQL нельзя.
attislocal bool  Столбец определён локально в данном отношении. Заметьте, что столбец может быть определён локально и при этом наследоваться.
attinhcount int4  Число прямых предков этого столбца. Столбец с ненулевым числом предков нельзя удалить или переименовать.
attcollation oid pg_collation.oid Заданное для столбца правило сортировки, либо 0, если тип столбца не сортируемый.
attacl aclitem[]  Права доступа к столбцу, если они были заданы непосредственно для этого столбца
attoptions text[]  Параметры уровня атрибута, в виде строк "ключ=значение"
attfdwoptions text[]  Параметры уровня атрибута для обёрток сторонних данных, в виде строк "ключ=значение"

В записи удалённого столбца в pg_attribute поле atttypid сбрасывается в ноль, но attlen и другие поля, копируемые из pg_type, сохраняют актуальные значения. Это нужно, чтобы справиться с ситуацией, когда после удаления столбца удаляется и его тип данных, так что записи в pg_type больше не будет. В таких случаях для интерпретации содержимого строки таблицы могут использоваться attlen и другие поля.