要查询 PostgreSQL 数据库中每个表的大小并按大小排序,可以使用以下 SQL 查询语句:
SELECT
relname as table_name,
pg_size_pretty(pg_total_relation_size(relid)) as table_size
FROM
pg_catalog.pg_statio_user_tables
ORDER BY
pg_total_relation_size(relid) DESC;
解释一下上述查询语句:
首先,我们使用 pg_tables
系统表来列出所有表的名称和所属模式(schema)。
然后,我们使用 pg_total_relation_size
函数来计算每个表的大小,并将其命名为 table_size
。
最后,我们使用 pg_size_pretty
函数将每个表的大小转换为易于理解的格式,并按表的大小从大到小进行排序。
请注意,此查询将返回所有表的大小,包括系统表和临时表。如果您只想查看用户表的大小,则可以将查询更改为如下所示:
SELECT
relname as table_name, pg_total_relation_size(relid),
pg_size_pretty(pg_total_relation_size(relid)) as table_size
FROM
pg_catalog.pg_statio_user_tables
WHERE
schemaname != 'pg_catalog' AND
schemaname != 'information_schema'
ORDER BY
pg_total_relation_size(relid), DESC;
在此版本中,我们添加了一个 WHERE
子句,以排除 PostgreSQL 系统表和 pg_toast
表。