我的数据库中有两个带有附件的表。来自多个建筑的人使用我的应用程序将附件上传到数据库(文件本身存储在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而不是这些大数字提供信息?
最佳答案
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;
最好将octet_length()替换为pg_column_size()。不确定这将如何影响您的查询。
关于sql - 如何找到以GB为单位的列大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29170215/