list of schema with sizes (relative and absolute) in a PostgreSQL database

前端 未结 3 819
闹比i
闹比i 2020-12-23 14:00

I\'m looking for a query that returns a result of the form for any database (see example below supposing total space used by the database is 40GB)

schema | si         


        
3条回答
  •  感情败类
    2020-12-23 14:55

    Try this:

    SELECT schema_name, 
           sum(table_size),
           (sum(table_size) / database_size) * 100
    FROM (
      SELECT pg_catalog.pg_namespace.nspname as schema_name,
             pg_relation_size(pg_catalog.pg_class.oid) as table_size,
             sum(pg_relation_size(pg_catalog.pg_class.oid)) over () as database_size
      FROM   pg_catalog.pg_class
         JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
    ) t
    GROUP BY schema_name, database_size


    Edit: just noticed the workaround with summing up all tables to get the database size is not necessary:

    SELECT schema_name, 
           pg_size_pretty(sum(table_size)::bigint),
           (sum(table_size) / pg_database_size(current_database())) * 100
    FROM (
      SELECT pg_catalog.pg_namespace.nspname as schema_name,
             pg_relation_size(pg_catalog.pg_class.oid) as table_size
      FROM   pg_catalog.pg_class
         JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
    ) t
    GROUP BY schema_name
    ORDER BY schema_name
    

提交回复
热议问题