首页 > 解决方案 > 获取索引列总大小

问题描述

要获取主键列的总大小(不是索引大小本身,因此SELECT pg_table_size(indexrelid) FROM pg_index WHERE ..在这种情况下不是解决方案),我使用这样的动态查询:

DO $$       
    DECLARE
    v_query TEXT;
    v_result BIGINT;
BEGIN
    SELECT 'SELECT COALESCE( SUM( pg_column_size('||string_agg(a.attname::TEXT, ')+pg_column_size(')||') ), 0) FROM '||'public.my_test'
    FROM   pg_index i
    JOIN   pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
    WHERE  i.indrelid = (SELECT 'public.my_test'::regclass::oid)
    AND    i.indisprimary
    INTO v_query;


    EXECUTE v_query INTO v_result;
    raise notice '%', v_result;
END; $$ LANGUAGE PLPGSQL

有没有办法做同样的事情,没有 PLPGSQL/动态查询,但直接使用 SQL?

标签: postgresqlpostgresql-11

解决方案


推荐阅读