pg_attribute stores information about table columns. There will be exactly one
pg_attribute row for every column in every table in the database. (There will also be attribute entries for indexes, and indeed all objects that have
The term attribute is equivalent to column and is used for historical reasons.
The table this column belongs to
The column name
The data type of this column
A copy of
The number of the column. Ordinary columns are numbered from 1 up. System columns, such as
Number of dimensions, if the column is an array type; otherwise 0. (Presently, the number of dimensions of an array is not enforced, so any nonzero value effectively means “it's an array”.)
Always -1 in storage, but when loaded into a row descriptor in memory this might be updated to cache the offset of the attribute within the row
A copy of
Normally a copy of
A copy of
This represents a not-null constraint.
This column has a default value, in which case there will be a corresponding entry in the
If a zero byte (
This column has been dropped and is no longer valid. A dropped column is still physically present in the table, but is ignored by the parser and so cannot be accessed via SQL.
This column is defined locally in the relation. Note that a column can be locally defined and inherited simultaneously.
The number of direct ancestors this column has. A column with a nonzero number of ancestors cannot be dropped nor renamed.
The defined collation of the column, or zero if the column is not of a collatable data type.
Column-level access privileges, if any have been granted specifically on this column
Attribute-level options, as “keyword=value” strings
Attribute-level foreign data wrapper options, as “keyword=value” strings
In a dropped column's
atttypid is reset to zero, but
attlen and the other fields copied from
pg_type are still valid. This arrangement is needed to cope with the situation where the dropped column's data type was later dropped, and so there is no
pg_type row anymore.
attlen and the other fields can be used to interpret the contents of a row of the table.