select pg_size_pretty(pg_total_relation_size('<schemaname>.<tablename>'));
select pg_size_pretty(pg_relation_size('<schemaname>.<tablename>'));
select schemaname,tablename,round(sum(pg_total_relation_size(schemaname || '.' || partitiontablename))/1024/1024) "MB" from pg_partitions where schemaname='<schemaname>' and tablename='<tablename>' group by 1,2;
select schemaname ,round(sum(pg_total_relation_size(schemaname||'.'||tablename))/1024/1024) "Size_MB" from pg_tables where schemaname='<schemaname>' group by 1;
select datname,pg_size_pretty(pg_database_size(datname)) from pg_database;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您列出的SQL查询语句是基于PostgreSQL数据库的系统目录表来获取表、分区表、Schema以及数据库大小信息的。这些查询非常实用,能帮助用户了解其在阿里云RDS for PostgreSQL或自建PostgreSQL实例中的数据存储情况。下面是对每个查询的简要说明和适用场景:
查询一张表的总大小(包括索引和数据):
SELECT pg_size_pretty(pg_total_relation_size('<schema_name>.<table_name>'));
这个查询会返回指定表的总大小,包括数据和所有关联索引,单位为易读格式(如MB, GB等)。
查询表的数据大小(不包括索引):
SELECT pg_size_pretty(pg_relation_size('<schema_name>.<table_name>'));
此查询仅返回表数据本身的大小,不包含任何索引。
查询分区表所有分区的总大小(包括索引和数据):
SELECT schemaname, tablename,
ROUND(SUM(pg_total_relation_size(schemaname || '.' || partitiontablename)) / 1024 / 1024) AS "MB"
FROM pg_partitions
WHERE schemaname = '<schema_name>' AND tablename = '<table_name>'
GROUP BY 1, 2;
如果您的表使用了分区,这个查询将计算该分区表所有分区的总大小。
查询一个Schema下面的所有表的总大小(包括索引和数据):
SELECT schemaname,
ROUND(SUM(pg_total_relation_size(schemaname || '.' || tablename)) / 1024 / 1024) AS "Size_MB"
FROM pg_tables
WHERE schemaname = '<schema_name>'
GROUP BY 1;
此查询适用于想要了解特定模式下所有表占用空间总和的情况。
查询每个数据库的大小:
SELECT datname, pg_size_pretty(pg_database_size(datname))
FROM pg_database;
如果您管理多个数据库,这个查询可以提供每个数据库的总大小,帮助监控资源使用情况。
请记得,在实际使用中,将<schema_name>
、<table_name>
替换为您实际的数据库模式名和表名。如果您是在阿里云RDS for PostgreSQL服务上执行这些操作,请确保您已通过合适的客户端工具或管理控制台连接到数据库,并且拥有足够的权限来执行这些系统目录表的查询。