here how excess indexes can be found, excess mean that there is a single column index which is covered by first value of complex index
select * from ( select count(*),pg_size_pretty(pg_relation_size(t.table_name)),t.table_name,t.indkey_names[1],min(array_length(t.indkey_names,1)) min_index_elements_cnt from ( SELECT i.relname as indname, i.relowner as indowner, idx.indrelid::regclass table_name, idx.indkey, ARRAY( SELECT pg_get_indexdef(idx.indexrelid, k + 1, true) FROM generate_subscripts(idx.indkey, 1) as k ORDER BY k ) as indkey_names, idx.indexprs IS NOT NULL as indexprs, idx.indpred IS NOT NULL as indpred FROM pg_index as idx JOIN pg_class as i ON i.oid = idx.indexrelid where idx.indrelid::text not like 'pg_toast%' and pg_relation_size(indexrelid::regclass)>100*1024*1024 ) t group by t.indkey_names[1],t.table_name having count (*) >1 ) tt where min_index_elements_cnt =1;