SELECT n.nspname AS schema, c.relname AS table_name, pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size, pg_total_relation_size(c.oid) AS total_size_bytes FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' -- 只统计普通表 AND n.nspname NOTIN ('pg_catalog','information_schema') ORDER BY pg_total_relation_size(c.oid) DESC;
查看所有索引的情况(大小,使用次数)
SELECT s.schemaname, s.relname AS table_name, s.indexrelname AS index_name, s.idx_scan AS times_used, -- 索引扫描次数 s.idx_tup_read AS tuples_read, -- 通过索引读取到的元组 s.idx_tup_fetch AS tuples_fetched,-- 通过索引返回的元组 pg_size_pretty(pg_relation_size(s.indexrelid)) AS index_size FROM pg_stat_all_indexes s JOIN pg_indexes i ON s.schemaname = i.schemaname AND s.indexrelname = i.indexname WHERE s.schemaname NOTIN ('pg_catalog', 'information_schema') ORDER BY index_size DESC;
查看单个表的基本情况
\d <table_name>
查看单个表的表数据大小 + 索引大小 + TOAST 大小
SELECT c.relname AS table_name, pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size, pg_size_pretty(pg_relation_size(c.oid)) AS data_size, pg_size_pretty(pg_indexes_size(c.oid)) AS indexes_size, pg_size_pretty(COALESCE(pg_relation_size(c.reltoastrelid), 0)) AS toast_size FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = '<schema>' -- 如有需要改成你的 schema AND c.relname = '<table_name>' AND c.relkind = 'r'; -- 普通表
查看单个表的索引明细(名称,大小,是否唯一/定义)
-- 把 schema 和 table 名改成你的 WITH t AS ( SELECT c.oid, n.nspname AS schema, c.relname AS table_name FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = '<schema>' -- ← 改 schema AND c.relname = '<table_name>' -- ← 改表名 AND c.relkind IN ('r','m','f') -- 普通表/物化视图/外部表 ) SELECT ic.relname AS index_name, pg_relation_size(ic.oid) AS index_bytes, pg_size_pretty(pg_relation_size(ic.oid)) AS index_size, am.amname AS access_method, idx.indisprimary AS is_primary, idx.indisunique AS is_unique, pg_get_indexdef(ic.oid) AS index_def FROM t JOIN pg_index idx ON idx.indrelid = t.oid JOIN pg_class ic ON ic.oid = idx.indexrelid JOIN pg_am am ON am.oid = ic.relam ORDER BY pg_relation_size(ic.oid) DESC;