Thread: Re: [Fwd: AW: Postgres Replication]

Re: [Fwd: AW: Postgres Replication]

From
"Eric C. Newton"
Date:
> > I would be very interested in hearing about your experiences with
> > this...

Well, Eric thinks it works just spiffy.  8-)

Recall is written in C++, and is meant to be extensible.  It was
extended for perl and the DBI layer.  

Note that this hack for perl is not perfect, especially in the area of
transactions and locks (which weren't a big deal for MySQL).  Recall
supports active repliation with strict consistency.  The perl
interface is cool hack, but Recall can do even more.

I would love it if you folks could take a look.  I'm working on an
CORBA version right now.  Any feedback would be very helpful.  

Besides... it don't cost nothin'

-Eric


lo_copy routine

From
Vince Roberts
Date:
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
invobject %u", oldlobjId);
 
       lobj = inv_create(INV_READ | INV_WRITE);       if (lobj == NULL)               elog(ERROR, "lo_copy: can't
createinv 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);
}