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
| Name | Type | References | Description | 
|---|---|---|---|
| indexrelid | oid |  | The OID of the pg_classentry for this index | 
| indrelid | oid |  | The OID of the pg_classentry 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 | |
| indisprimary | bool | If true, this index represents the primary key of the table
      ( indisuniqueshould 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 indisuniqueis 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/UPDATEoperations, 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 xminof thispg_indexrow is below theirTransactionXminevent 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/UPDATEoperations. | |
| 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 |  | This is an array of indnattsvalues that
       indicate which table columns this index indexes.  For example a value
       of1 3would 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 |  | For each column in the index key
       ( indnkeyattsvalues), 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 |  | For each column in the index key
       ( indnkeyattsvalues), this contains the OID
       of the operator class to use.  Seepg_opclassfor details. | 
| indoption | int2vector | This is an array of indnkeyattsvalues 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 inindkey.  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. |