Calling lo_open within user defined C function
I am trying to create a user defined C function that will
be called within PL/pgSQL
Namely, I need a function that will create a new Large Object and copy
the data
of an existing Large Object into the new Large Object.
This is the way the function would be registered
CREATE FUNCTION copyoid(oid) RETURNS oid AS '/copyoid.so' LANGUAGE
'C';
I notice that the lo_create and lo_open functions require a postgres
connection (PGConn)
Oid lo_creat(PGconn *conn, int mode)
int lo_open(PGconn *conn, Oid lobjId, int mode)
Since the function I wish to create will be executed within the backend,
how do I handle
the conn (PGconn) variable?
I realize I will need to open the original large object , create a new
large object and then
read the old and write the new until done, and then close both.
Every example I can find opens a connection and then uses the new
connection for these functions.
Is this required or can I use the "current" connection ?
Thanks
Vincent Roberts <vroberts@emanon.net> writes:
I notice that the lo_create and lo_open functions require a postgres
connection (PGConn)
Those are the client-side functions; naturally they need a connection
to the backend. For the server-side functions, look in
src/backend/libpq/be-fsstubs.c. For that matter, since you seemingly
don't need to hold an open LO reference except within your function,
you might find it easiest to work directly with the underlying
inv_create &etc layer of functions. See lo_export and lo_import in
be-fsstubs.c for inspiration.
regards, tom lane