如何在GB中找到列的大小?

时间:2015-03-20 15:30:20

标签: sql postgresql select aggregate

我有两个存储在数据库中的附件表。来自多个建筑物的人使用我的应用程序将附件上传到数据库(文件本身存储在 bytea 类型中)。我需要弄清楚每栋建筑物的附件总大小(以GB为单位)。

SELECT sum(octet_length(attachmentfile)) 
FROM schema.tattachments a, schema.trequests r, schema.tlocations l
WHERE r.location = l.locationid
AND a.reqid = r.reqid
AND r.sys_actntm > '2014-09-18'
GROUP BY l.building

上面的SQL返回由building:

分隔的bigint结果
    sum bigint
--|-----------
1 | 15782159611407981
2 | 1140653769
3 | 710849157667

等...

如何格式化这个SQL语句,以便它以GB或MB的形式提供信息,而不是这些大数字?

1 个答案:

答案 0 :(得分:3)

PostgreSQL有一些system administration functions会为你解决这个问题。这些方面的东西应该有效。

SELECT pg_size_pretty(sum(octet_length(attachmentfile)::bigint)) 
FROM schema.tattachments a, schema.trequests r, schema.tlocations l
WHERE r.location = l.locationid
AND a.reqid = r.reqid
AND r.sys_actntm > '2014-09-18'
GROUP BY l.building;

使用pg_column_size()替换octet_length()可能会更好。不确定这会如何影响您的查询。