AdvancedPerformance & Indexes

Table statistics and size analysis

The query

SQL
SELECT
  schemaname,
  tablename,
  pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS total_size,
  pg_size_pretty(pg_relation_size(schemaname||'.'||tablename)) AS table_size,
  pg_size_pretty(
    pg_total_relation_size(schemaname||'.'||tablename) -
    pg_relation_size(schemaname||'.'||tablename)
  ) AS indexes_size,
  n_live_tup AS live_rows,
  seq_scan,
  idx_scan
FROM pg_stat_user_tables
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
Tested against PostgreSQL 16

Note

Monitor table and index sizes. High seq_scan with low idx_scan = missing index. Review idx_scan usage.