如何在Postgresql模式中查找特定表的数据长度和索引长度?

时间:2019-05-30 06:36:01

标签: postgresql postgresql-9.6

我正在将应用程序从MySQL迁移到PostgreSQL。在MySQL中,我根据查询的要求使用查询来计算特定表的内存大小,

SELECT SUM(ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2)) 'Size in MB' FROM  INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'table_name';

但是我不能在PostgreSQL中做同样的事情。如果我运行相同的查询,则显示为

ERROR:  type "sum" does not exist

我已经在各个站点尝试了解决方案,但是找不到适合我需求的确切解决方案。请给我建议一个解决方案。预先感谢。

2 个答案:

答案 0 :(得分:0)

PostgreSQL在 INFORMATION_SCHEMA.TABLES 中没有此信息,但是您可以尝试使用表 SVV_TABLE_INFO 来获取表的大小。

希望有帮助!

答案 1 :(得分:0)

您的查询查询失败,因为您对别名使用单引号-'Size in MB'

此外,DATA_LENGTH中没有INDEX_LENGTHINFORMATION_SCHEMA.TABLES

在Postgres中,您可以使用pg_total_relation_size函数。

SELECT ROUND(pg_total_relation_size (oid) / ( 1024.0 * 1024.0 ), 2) AS 
       "Size in MB" 
FROM   pg_class c 
WHERE  relname = 'table_name'; 

看看this答案,以了解可获得各种尺寸的功能。

DEMO