我认为最好的答案可以在Grace Batumbya's Blog发现,在verbis:
The algorithm is pretty simple, get the binary data, if it is null, return null. Else create a large object and in the lowrite function, pass it the binary value, instead of a path to a file.
The code for the procedure is below. Note that the lo_manage package should be installed for this to work.
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;
So now the following code works: CREATE TABLE bytea_to_lo ( lo largeObj );
INSERT INTO bytea_to_lo VALUES (DECODE('00AB','hex'));
我已经尝试过了,就像一个魅力。
相关:http://stackoverflow.com/questions/29433041/understanding-cast-from-bytea-to-oid – 2015-04-03 17:07:30