blob: 09f65bdf6bc87232be53c9d6617e4469245339ee [file]
---
title: pg_attribute
---
The `pg_attribute` table 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 all objects that have `pg_class` entries.) The term attribute is equivalent to column.
<a id="topic1__ga143898"></a>
<span class="tablecap">Table 1. pg\_catalog.pg\_attribute</span>
| column | type | references | description |
|-----------------|----------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `attrelid` | oid | pg\_class.oid | The table this column belongs to |
| `attname` | name |   | The column name |
| `atttypid` | oid | pg\_type.oid | The data type of this column |
| `attstattarget` | integer |   | Controls the level of detail of statistics accumulated for this column by `ANALYZE`. A zero value indicates that no statistics should be collected. A negative value says to use the system default statistics target. The exact meaning of positive values is data type-dependent. For scalar data types, it is both the target number of "most common values" to collect, and the target number of histogram bins to create. |
| `attlen` | smallint |   | A copy of pg\_type.typlen of this column's type. |
| `attnum` | smallint |   | The number of the column. Ordinary columns are numbered from 1 up. System columns, such as oid, have (arbitrary) negative numbers. |
| `attndims` | integer |   | 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 is an array) |
| `attcacheoff` | integer |   | Always `-1` in storage, but when loaded into a row descriptor in memory this may be updated to cache the offset of the attribute within the row |
| `atttypmod` | integer |   | Records type-specific data supplied at table creation time (for example, the maximum length of a varchar column). It is passed to type-specific input functions and length coercion functions. The value will generally be `-1` for types that do not need it. |
| `attbyval` | boolean |   | A copy of pg\_type.typbyval of this column's type |
| `attstorage` | char |   | Normally a copy of pg\_type.typstorage of this column's type. For TOAST-able data types, this can be altered after column creation to control storage policy. |
| `attalign` | char |   | A copy of pg\_type.typalign of this column's type |
| `attnotnull` | boolean |   | This represents a not-null constraint. It is possible to change this column to enable or disable the constraint. |
| `atthasdef` | boolean |   | This column has a default value, in which case there will be a corresponding entry in the pg\_attrdef catalog that actually defines the value |
| `attisdropped` | boolean |   | 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 |
| `attislocal` | boolean |   | This column is defined locally in the relation. Note that a column may be locally defined and inherited simultaneously |
| `attinhcount` | integer |   | The number of direct ancestors this column has. A column with a nonzero number of ancestors cannot be dropped nor renamed |