Chức năng này đã đủ hiệu quả đối với tôi, bạn có thể muốn thử nó với dữ liệu của bạn:
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';
Một tùy chọn khác là select sum(length(data)) from pg_largeobject where loid=the_oid
nhưng nó yêu cầu quyền truy cập đọc đối với pg_largeobject mà tôi nghĩ đã bị chặn trong pg 9.0+ đối với những người không phải là superusers