## 52.26. `pg_index`

[]()

 The catalog `pg_index` contains part of the information about indexes. The rest is mostly in [`pg_class`](catalog-pg-class.html).

**Table 52.26. `pg_index` Columns**

|                                                                                                                                                                                                                                          Column Type<br/><br/> Description                                                                                                                                                                                                                                          |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|                                                                                                                                                                             `indexrelid` `oid` (references [`pg_class`](catalog-pg-class.html).`oid`)<br/><br/> The OID of the [`pg_class`](catalog-pg-class.html) entry for this index                                                                                                                                                                             |
|                                                                                                                                                                     `indrelid` `oid` (references [`pg_class`](catalog-pg-class.html).`oid`)<br/><br/> The OID of the [`pg_class`](catalog-pg-class.html) entry for the table this index is for                                                                                                                                                                      |
|                                                                                                                                                                            `indnatts` `int2`<br/><br/> The total number of columns in the index (duplicates `pg_class.relnatts`); this number includes both key and included attributes                                                                                                                                                                             |
|                                                                                                                                                                 `indnkeyatts` `int2`<br/><br/> 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`<br/><br/> If true, this is a unique index                                                                                                                                                                                                                            |
|                                                                                                                                                                                 `indisprimary` `bool`<br/><br/> If true, this index represents the primary key of the table (`indisunique` should always be true when this is true)                                                                                                                                                                                 |
|                                                                                                                                                                                                               `indisexclusion` `bool`<br/><br/> If true, this index supports an exclusion constraint                                                                                                                                                                                                                |
|                                                                                                                                                                                    `indimmediate` `bool`<br/><br/> If true, the uniqueness check is enforced immediately on insertion (irrelevant if `indisunique` is not true)                                                                                                                                                                                     |
|                                                                                                                                                                                                                `indisclustered` `bool`<br/><br/> If true, the table was last clustered on this index                                                                                                                                                                                                                |
|                                                                                  `indisvalid` `bool`<br/><br/> If true, the index is currently valid for queries. False means the index is possibly incomplete: it must still be modified by [`INSERT`](sql-insert.html)/[`UPDATE`](sql-update.html) operations, but it cannot safely be used for queries. If it is unique, the uniqueness property is not guaranteed true either.                                                                                  |
|                                                                                                                              `indcheckxmin` `bool`<br/><br/> 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`<br/><br/> If true, the index is currently ready for inserts. False means the index must be ignored by [`INSERT`](sql-insert.html)/[`UPDATE`](sql-update.html) operations.                                                                                                                                                            |
|                                                                                                                                                                              `indislive` `bool`<br/><br/> If false, the index is in process of being dropped, and should be ignored for all purposes (including HOT-safety decisions)                                                                                                                                                                               |
|                                                                                                                                                     `indisreplident` `bool`<br/><br/> If true this index has been chosen as “replica identity” using [`ALTER TABLE ... REPLICA IDENTITY USING INDEX ...`](sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY)                                                                                                                                                      |
|`indkey` `int2vector` (references [`pg_attribute`](catalog-pg-attribute.html).`attnum`)<br/><br/> 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`](catalog-pg-collation.html).`oid`)<br/><br/> 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`](catalog-pg-opclass.html).`oid`)<br/><br/> For each column in the index key (`indnkeyatts` values), this contains the OID of the operator class to use. See [`pg_opclass`](catalog-pg-opclass.html) for details.                                                                                                                          |
|                                                                                                                                                                    `indoption` `int2vector`<br/><br/> 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`<br/><br/> 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`<br/><br/> Expression tree (in `nodeToString()` representation) for partial index predicate. Null if not a partial index.                                                                                                                                                                                  |

