pg_index contains part of the information about indexes. The rest is mostly in pg_class.
Table 3-9. 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 registered procedure if this is a functional index |
| 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. |
| 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 | unused | |
| 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 |