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