Here is a basic lo_copy routine

It copies a large object from an existing large object


PG_FUNCTION_INFO_V1(lo_copy);

Datum
lo_copy(PG_FUNCTION_ARGS)
{
        Oid                     oldlobjId = PG_GETARG_OID(0);
        LargeObjectDesc         *lobj,*oldlobj;
        int                     readbytes,
                                writebytes;
        char                    buf[BUFSIZE];
        Oid                     lobjOid;


        oldlobj = inv_open(oldlobjId, INV_READ);
        if (lobj == NULL)
                elog(ERROR, "lo_copy: can't open inv object %u", oldlobjId);

        lobj = inv_create(INV_READ | INV_WRITE);
        if (lobj == NULL)
                elog(ERROR, "lo_copy: can't create inv object");
        lobjOid = lobj->id;

        while ((readbytes = inv_read(oldlobj, buf, BUFSIZE)) > 0)
        {
                writebytes = inv_write(lobj, buf, readbytes);
                if (writebytes != readbytes)
                        elog(ERROR, "lo_copy: error while copying");
        }

        inv_close(oldlobj);
        inv_close(lobj);

        PG_RETURN_OID(lobjOid);
}
 



---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to