Again, I found something that NexJ Express uses that PostgreSQL does not have support for, that is creating large objects when given
Like with Comparing bytea data to a Large Object on server side, I created a
CAST (bytea AS oid) and a procedure to solve this problem.
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'));