查询 PostgreSQL 数据库中每个表的大小并按大小排序

要查询 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 表。

links