请问PostgreSQL为什么没有直接获取大对象大小的函数?我相信可以seek()
对象的末尾,然后tell()
位置,但这不是太昂贵了吗?我在谷歌中找不到任何关于它的信息?那么获取 lobject 大小的正确方法是什么?如果要填充 Content-Size
http header ?
最佳答案
这个函数对我来说已经足够高效了,你可能想用你的数据试试:
CREATE OR REPLACE FUNCTION lo_size(oid) RETURNS integer
AS $$
declare
fd integer;
sz integer;
begin
fd = lo_open($1, 262144);
if (fd<0) then
raise exception 'Failed to open large object %', $1;
end if;
sz=lo_lseek(fd,0,2);
if (lo_close(fd)!=0) then
raise exception 'Failed to close large object %', $1;
end if;
return sz;
end;
$$ LANGUAGE 'plpgsql';
另一个选项是 select sum(length(data)) from pg_largeobject where loid=the_oid
但它需要对 pg_largeobject 的读取权限,我认为非 super 用户在 pg 9.0+ 中已被抑制
关于database - 在PostgreSQL中获取lobject的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248738/