database - 在PostgreSQL中获取lobject的大小

标签 database api postgresql

请问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/

相关文章:

mysql - 关于 MySQL 表上的垃圾收集/自动删除的问题

api - 是否可以在 Haskell 中创建像 Scala 2.8 这样的集合 api?

postgresql - 控制台访问 Dokku 的 PostgreSQL 插件?

java - 我的更改密码界面在 java eclipse web 应用程序上不起作用

sql - 在 Vertica 中将 MAC 地址转换为整数

api - 使用 soundcloud API 获取特定用户的轨道列表

java - 在WSO2中给出端口号和传递的参数

mysql - 如何将 postgresql 查询转换为 mysql 查询

mysql - 在此查询中对每个客户计数一次

database - 错误 : right sibling's left-link doesn't match: block 19 links to 346956 instead of expected 346955 in index "pg_depend_reference_index"