2011-02-23 38 views
6

我的postgres数据库(版本8.2.3)显示大小为24 GB。postgresql总数据库大小不匹配单个表大小的总和

为了得到这个数字我执行此查询:

SELECT 
    oid, datname, pg_database_size(datname) as actualsize, 
    pg_size_pretty(pg_database_size(datname)) as size 
FROM pg_database 
ORDER BY datname 

然而,在同一个数据库中的各个表的大小不添加24 GB当我执行此查询:

SELECT 
    schemaname, tablename, pg_size_pretty(size) AS size_pretty, 
    pg_size_pretty(total_size) AS total_size_pretty 
FROM 
    (SELECT *, pg_relation_size(schemaname||'.'||tablename) AS size, 
    pg_total_relation_size(schemaname||'.'||tablename) AS total_size 
    FROM pg_tables where schemaname = 'public') AS TABLES 
ORDER BY total_size DESC; 

我已经完成了个人桌子大小与漂亮的大小和total_size总结,但价值不匹配:

我得到一个相当大的3.5 GB

我得到一个5.2 GB的total_size_pretty。

我在哪里可以找到剩余空间的使用情况?

回答

1

什么是所有索引和大对象的总大小?

7

通常我使用以下两个查询来获取数据库对象的大小。希望这可以帮助。

SELECT pg_size_pretty(sum(pg_relation_size(pg_class.oid))::bigint), nspname, 
CASE pg_class.relkind WHEN 'r' THEN 'table' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 'v' THEN 'view' WHEN 't' THEN 'toast' ELSE pg_class.relkind::text END 
FROM pg_class 
LEFT OUTER JOIN pg_namespace ON (pg_namespace.oid = pg_class.relnamespace) 
GROUP BY pg_class.relkind, nspname 
ORDER BY sum(pg_relation_size(pg_class.oid)) DESC; 

-

SELECT pg_size_pretty(pg_relation_size(pg_class.oid)), pg_class.relname, pg_namespace.nspname, 
CASE pg_class.relkind WHEN 'r' THEN 'table' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 'v' THEN 'view' WHEN 't' THEN 'TOAST' ELSE pg_class.relkind::text END 
FROM pg_class 
LEFT OUTER JOIN pg_namespace ON (pg_namespace.oid = pg_class.relnamespace) 
ORDER BY pg_relation_size(pg_class.oid) DESC; 
+1

非常漂亮的查询, 非常感谢。 (找到10GB的索引...) – 2012-11-19 08:21:27