想知道一个table的行数的话,select count(*) 就可以了。
想要知道各个表占的空间的大小的话,需要知道一行所占空间,再乘以行数。
如果只是大概了解,不需要精确的数据的,可以利用postgre的统计数据。
表 pg_class
・relpages block数
・reltuples 行数
先实行 ANALYZE命令,更新统计数据。
block的大小是8k (查看命令:SHOW block_size)。换算成M的话,一个表所占空间是 relpages / 128Mbytes
查看SQL
SELECT relname, reltuples, (relpages / 128) as mbytes, (relpages * 8192.0 / (reltuples + 1e-10)) as average_row_size FROM pg_class ORDER BY mbytes DESC;
结果
relname | reltuples | mbytes | row_size
--------------------+-----------+--------+------------------
some_table | 89693 | 210 | 2456.75973866702
other_table | 93741 | 52 | 583.844509398135
....
再详细一点
SELECT pgn.nspname, relname, pg_size_pretty(relpages::bigint *