Postgresql统计数据库、各表占用磁盘大小

关键词:

数据库

SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,  
   CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')  
       THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))  
       ELSE 'No Access'  
   END AS SIZE  
FROM pg_catalog.pg_database d  
   ORDER BY  
   CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')  
       THEN pg_catalog.pg_database_size(d.datname)  
       ELSE NULL  
   END DESC 
   LIMIT 20


SELECT  
    table_schema || '.' || table_name AS table_full_name,  
    pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size  
FROM information_schema.tables  
ORDER BY  
    pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC
--数据库中单个表的大小(不包含索引)
select pg_size_pretty(pg_relation_size('表名'));
select pg_size_pretty(pg_database_size('数据库名称'));
--查出所有表(包含索引)并排序
SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS sizeFROM information_schema.tablesORDER BYpg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC limit 20
--查出表大小按大小排序并分离data与index
SELECTtable_name,
pg_size_pretty(table_size) AS table_size,
pg_size_pretty(indexes_size) AS indexes_size,
pg_size_pretty(total_size) AS total_sizeFROM (SELECTtable_name,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_sizeFROM (SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_nameFROM information_schema.tables
) AS all_tablesORDER BY total_size DESC) AS pretty_sizes


作者:紫霞狼

原文地址: http://seme.me/article/13

版权归属: 紫霞狼   转载时请以链接形式注明出处