我有两个存储在数据库中的附件表。来自多个建筑物的人使用我的应用程序将附件上传到数据库(文件本身存储在 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的形式提供信息,而不是这些大数字?
答案 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()可能会更好。不确定这会如何影响您的查询。