Я не думаю, что эта версия еще существует в этом потоке: она предоставляет как список имен столбцов, так и ddl для индекса.
CREATE OR REPLACE VIEW V_TABLE_INDEXES AS
SELECT
n.nspname as "schema"
,t.relname as "table"
,c.relname as "index"
,i.indisunique AS "is_unique"
,array_to_string(array_agg(a.attname), ', ') as "columns"
,pg_get_indexdef(i.indexrelid) as "ddl"
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
JOIN pg_catalog.pg_index i ON i.indexrelid = c.oid
JOIN pg_catalog.pg_class t ON i.indrelid = t.oid
JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(i.indkey)
WHERE c.relkind = 'i'
and n.nspname not in ('pg_catalog', 'pg_toast')
and pg_catalog.pg_table_is_visible(c.oid)
GROUP BY
n.nspname
,t.relname
,c.relname
,i.indisunique
,i.indexrelid
ORDER BY
n.nspname
,t.relname
,c.relname;
Я обнаружил, что индексы, использующие функции, не связываются с именами столбцов, поэтому иногда вы видите список индексов, например. имя одного столбца, если на самом деле используется 3.
Пример:
CREATE INDEX ui1 ON table1 (coalesce(col1,''),coalesce(col2,''),col3)
Запрос возвращает только 'col3' в качестве столбца индекса, но DDL показывает полный набор столбцов, используемых в индексе.