Получение размера объекта в PostgreSQL - PullRequest
0 голосов
/ 12 февраля 2012

Интересно, почему в PostgreSQL нет функции для непосредственного получения размера большого объекта.Я считаю, что можно seek() конец объекта, а затем tell() положение, но не слишком ли это дорого?Я не могу найти информацию об этом в Google?Итак, как правильно получить размер объекта, например, если вы хотите заполнить Content-Size http заголовок?

1 Ответ

6 голосов
/ 12 февраля 2012

Эта функция была достаточно эффективной для меня, вы можете попробовать ее с вашими данными:

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, который, я думаю, был подавленв pg 9.0+ для не суперпользователей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...