52.26. pg_index
| Up | Chapter 52. System Catalogs | Home |

## 52.26. pg_index #

The catalog pg_index contains part of the information about indexes. The rest is mostly in pg_class.

Table 52.26. pg_index Columns

Column Type Description
`indexrelid` oid (references pg_class.`oid`) The OID of the pg_class entry for this index
`indrelid` oid (references pg_class.`oid`) The OID of the pg_class entry for the table this index is for
`indnatts` int2 The total number of columns in the index (duplicates `pg_class.relnatts`); this number includes both key and included attributes
`indnkeyatts` int2 The number of key columns in the index, not counting any included columns, which are merely stored and do not participate in the index semantics
`indisunique` bool If true, this is a unique index
`indnullsnotdistinct` bool This value is only used for unique indexes. If false, this unique index will consider null values distinct (so the index can contain multiple null values in a column, the default PostgreSQL behavior). If it is true, it will consider null values to be equal (so the index can only contain one null value in a column).
`indisprimary` bool If true, this index represents the primary key of the table (`indisunique` should always be true when this is true)
`indisexclusion` bool If true, this index supports an exclusion constraint
`indimmediate` bool If true, the uniqueness check is enforced immediately on insertion (irrelevant if `indisunique` is not true)
`indisclustered` bool If true, the table was last clustered on this index
`indisvalid` bool If true, the index is currently valid for queries. False means the index is possibly incomplete: it must still be modified by INSERT/UPDATE operations, but it cannot safely be used for queries. If it is unique, the uniqueness property is not guaranteed true either.
`indcheckxmin` bool If true, queries must not use the index until the `xmin` of this pg_index row is below their TransactionXmin event horizon, because the table may contain broken HOT chains with incompatible rows that they can see
`indisready` bool If true, the index is currently ready for inserts. False means the index must be ignored by INSERT/UPDATE operations.
`indislive` bool If false, the index is in process of being dropped, and should be ignored for all purposes (including HOT-safety decisions)
`indisreplident` bool If true this index has been chosen as “replica identity” using ALTER TABLE ... REPLICA IDENTITY USING INDEX ...
`indkey` int2vector (references pg_attribute.`attnum`) This is an array of `indnatts` values that indicate which table columns this index indexes. For example, a value of `1 3` would mean that the first and the third table columns make up the index entries. Key columns come before non-key (included) columns. A zero in this array indicates that the corresponding index attribute is an expression over the table columns, rather than a simple column reference.
`indcollation` oidvector (references pg_collation.`oid`) For each column in the index key (`indnkeyatts` values), this contains the OID of the collation to use for the index, or zero if the column is not of a collatable data type.
`indclass` oidvector (references pg_opclass.`oid`) For each column in the index key (`indnkeyatts` values), this contains the OID of the operator class to use. See pg_opclass for details.
`indoption` int2vector This is an array of `indnkeyatts` values that store per-column flag bits. The meaning of the bits is defined by the index's access method.
`indexprs` pg_node_tree Expression trees (in `nodeToString()` representation) for index attributes that are not simple column references. This is a list with one element for each zero entry in `indkey`. Null if all index attributes are simple references.
`indpred` pg_node_tree Expression tree (in `nodeToString()` representation) for partial index predicate. Null if not a partial index.

| Up |
| Home |