pg_index contains part of the information about indexes. The rest is mostly in pg_class.
Table 3-16. pg_index Columns
| Name | Type | References | Description |
|---|---|---|---|
| indexrelid | oid | pg_class.oid | The OID of the pg_class entry for this index |
| indrelid | oid | pg_class.oid | The OID of the pg_class entry for the table this index is for |
| indproc | regproc | pg_proc.oid | The function's OID if this is a functional index, else zero |
| indkey | int2vector | pg_attribute.attnum | This is a vector (array) of up to INDEX_MAX_KEYS values that indicate which table columns this index pertains to. For example a value of 1 3 would mean that the first and the third column make up the index key. For a functional index, these columns are the inputs to the function, and the function's return value is the index key. |
| indclass | oidvector | pg_opclass.oid | For each column in the index key this contains a reference to the "operator class" to use. See pg_opclass for details. |
| indisclustered | bool | If true, the table was last clustered on this index. | |
| indisunique | bool | If true, this is a unique index. | |
| indisprimary | bool | If true, this index represents the primary key of the table. (indisunique should always be true when this is true.) | |
| indreference | oid | unused | |
| indpred | text | Expression tree (in the form of a nodeToString representation) for partial index predicate. Empty string if not a partial index. |