【发布时间】:2016-04-05 18:40:10
【问题描述】:
我有一个简单的表,我想用它来存储文件。
CREATE TABLE table(
ID INTEGER NOT NULL,
FILE_NAME TEXT,
FILE OID
)
;
SQL 查询有什么方法可以计算表中文件的总大小吗?没有功能可以吗?
【问题讨论】:
-
在我的情况下,我更喜欢使用查询而不是函数?这可能吗?
我有一个简单的表,我想用它来存储文件。
CREATE TABLE table(
ID INTEGER NOT NULL,
FILE_NAME TEXT,
FILE OID
)
;
SQL 查询有什么方法可以计算表中文件的总大小吗?没有功能可以吗?
【问题讨论】:
rzo 接近但不完全正确。
select file_name, pg_column_size(lo_get(oid)) from files;
以字节为单位提供大小。
如果你想要漂亮的打印:
select file_name, pg_size_pretty(pg_column_size(lo_get(oid))::numeric) from files;
【讨论】:
如果您对总磁盘大小(磁盘使用情况)感兴趣,您可以执行以下操作:
SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_relation_size(C.oid)) AS "size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_relation_size(C.oid) DESC
LIMIT 20;
其他测量关系大小的查询可以找到in the PostgreSQL Wiki
【讨论】: