Postgres: Find duplicate indexes

 SELECT
    c.relname AS relname,
    pg_size_pretty(sum(pg_relation_size(idx))::bigint) AS size,
    (array_agg(idx))[1] AS idx1,
    (array_agg(idx))[2] AS idx2,
    (array_agg(idx))[3] AS idx3,
    (array_agg(idx))[4] AS idx4,
    (array_agg(idx))[5] AS idx5,
    (array_agg(idx))[6] AS idx6,
    (array_agg(idx))[7] AS idx7,
    (array_agg(idx))[8] AS idx8,
    (array_agg(idx))[9] AS idx9,
    (array_agg(idx))[10] AS idx10
FROM (
    SELECT
        indrelid,
        indexrelid::regclass AS idx,
        (indrelid::text || E'\n' || indclass::text || E'\n' || indkey::text || E'\n' || coalesce(indexprs::text, '') || E'\n' || coalesce(indpred::text, '')) AS key
    FROM
        pg_index) sub
    JOIN pg_class c ON (c.oid = sub.indrelid)
GROUP BY
    relname,
    key
HAVING
    count(*) > 1
ORDER BY
    sum(pg_relation_size(idx)) DESC;

Comments

Popular posts from this blog

Postgres: Clean up stopped replication slot

PeopleSoft: Clean Up PUM