我认为最好的答案可以在Grace Batumbya 的博客中找到,原文:
算法很简单,获取二进制数据,如果为null,则返回null。否则创建一个大对象并在 lowrite 函数中,将二进制值传递给它,而不是文件的路径。
该过程的代码如下。请注意,应该安装 lo_manage 软件包才能使其正常工作。
create or replace function blob_write(lbytea bytea)
returns oid
volatile
language plpgsql as
$f$
declare
loid oid;
lfd integer;
lsize integer;
begin
if(lbytea is null) then
return null;
end if;
loid := lo_create(0);
lfd := lo_open(loid,131072);
lsize := lowrite(lfd,lbytea);
perform lo_close(lfd);
return loid;
end;
$f$;
CREATE CAST (bytea AS oid) WITH FUNCTION blob_write(bytea) AS ASSIGNMENT;
所以现在下面的代码可以工作了: CREATE TABLE bytea_to_lo ( lo largeObj );
INSERT INTO bytea_to_lo VALUES ( DECODE('00AB','hex'));
我已经尝试过了,它就像一个魅力。